在Visual Studio 2015 Update 3中的Typescript 2.2.1项目中,我在错误列表中得到了数百个错误,例如:

不能写入文件'C:/{{my-project}}/node_modules/buffer-shims/index.js',因为它会覆盖输入文件。

它一直都是这样的。它实际上并没有阻止构建,并且一切都可以正常工作,但是错误列表会分散注意力,并且很难在发生“真正的”错误时定位它们。

这是我的tsconfig。json文件

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "ES5",
    "forceConsistentCasingInFileNames": true,
    "strictNullChecks": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noFallthroughCasesInSwitch": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,

    "typeRoots": [],
    "types": [] //Explicitly specify an empty array so that the TS2 @types modules are not acquired since we aren't ready for them yet.
  },
  "exclude": ["node_modules"]
}

我怎样才能消除这些错误呢?


当前回答

使用tsc——build——explainFiles来跟踪.d。Ts被包含在您的构建中!

e.g.

dist/index.d.ts
  Imported via '..' from file 'mocks/mock-requests.ts'

在这种情况下,我应该导入'..'以外的东西…

看到https://www.typescriptlang.org/tsconfig explainFiles

其他回答

在我的情况下,这是因为我不小心包含了一个类从dist目录:

import {Entities} from "../../dist";

刚刚删除了这条线,现在一切都好了。

set allowJS: true不是woI set outDir: true,它是工作

在我的实例中,我使用了outDir选项,但没有从输入中排除目标目录:

// Bad
{
    "compileOnSave": true,
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es5",
        "allowUnreachableCode": false,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "typeRoots": [ "./typings" ],
        "outFile": "./built/combined.js"
    },
    "include": [
        "./**/*"
    ],
    "exclude": [
        "./plugins/**/*",
        "./typings/**/*"
    ]
}

我们所要做的就是排除outDir中的文件:

// Good
{
    "compileOnSave": true,
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es5",
        "allowUnreachableCode": false,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "typeRoots": [ "./typings" ],
        "outFile": "./built/combined.js"
    },
    "include": [
        "./**/*"
    ],
    "exclude": [
        "./plugins/**/*",
        "./typings/**/*",
        "./built/**/*" // This is what fixed it!
    ]
}

使用tsc——build——explainFiles来跟踪.d。Ts被包含在您的构建中!

e.g.

dist/index.d.ts
  Imported via '..' from file 'mocks/mock-requests.ts'

在这种情况下,我应该导入'..'以外的东西…

看到https://www.typescriptlang.org/tsconfig explainFiles

TL;DR:使用单一回购?检查循环依赖关系!

您可能不小心从依赖于此包的包中导入了类型。

我也得到了这个错误,没有其他答案帮助我。我花了一些时间来确定它,但在浪费了至少一个小时之后,我发现潜在的错误是我的mono repo中包之间的循环依赖。

因此,我们使用yarn工作区,并拥有一个与Zilliqas非常相似的单一回购结构(我们的回购还不是开源的,所以不能链接到它)。

在包A中,我意外地(不知道怎么…)从包B中导入了一个类型,但包B反过来依赖于包A——我在packages/packageB/package.json中明确地声明了:

"dependencies": {
    ...,
    "@mycompany/packageA": "^0.0.0",
    ...
}

这是正确的。但不幸的是,在我的例子中,可能会意外地从包B中导入一个类型,即packages/packageA/_types。但是由于我没有显式地声明(因为依赖是隐式的,不需要的和意外的)这个依赖在packages/packageA/package中。在“依赖”下的Json, typescript编译器(tsc)没有检测到依赖循环,但仍然未能构建…

所以,是的,感谢TypeScript提供的令人敬畏的错误消息…哇,很多不相干的东西。