在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"]
}

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


当前回答

我通过从我的tsconfig中删除“declaration”:true来解决这个问题。json文件。不过现在我没有声明了,所以没用。

其他回答

因为这个问题可能有很多原因!我要分享我的经验,当我遇到错误!

一个故事

对我来说!我有两个文件!一个src /索引。另一个是src/test/logToFile.directTest.ts。

src /测试/ logToFile.directTest除外。问题解决了! 似乎每个决议都试图写入同一个文件!

我对声明的配置是:

{
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "./dist",
    "module": "commonjs",
    "noImplicitAny": true,
    "lib": ["ESNext", "DOM"],
    "outDir": "./dist",
    "target": "es6",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

一切都设置正确!您可以注意到我排除了dist目录。并正确地设置必要的outDir(如果不这样做,您可能会得到错误!)所有其他的答案都提到了这一点)。

更多的是,我使用配置与其他存储库和包!我没有任何问题!

最后!是这样的:

import { Logger } from '../..';

我的意思错了!

它应该是:

import { Logger } from '..';

移植模块到它自己的存储库我忘记改变导入!

我还把文件放回去了!经过测试,一切都运行良好!

并从故事中带来利益!

如果所有有意义的解决方案(或要做的事情)都得到尊重,你仍然会遇到问题!确保在ts文件中检查您的导入!

导入可以引用根目录(例如)并自动重定向回dist!所以。d。ts文件!Typescript通常会抛出一个错误!作为站出来的目录文件夹!但它没有!并且犯了那个错误!

并带来更多的利益

解释错误

简而言之,描述如下:

https://github.com/microsoft/TypeScript/issues/6046#issuecomment-210186647

简而言之,输入文件要么是您在命令行传递的文件,要么是您在命令行传递的文件之一的依赖文件。

如果两个映射到同一个声明文件!当他们有相同的名字时就会发生这种情况!或者返回到声明文件本身!从文件导入!通过一个糟糕的导入(就像在我的情况下)!或者dist没有被忽略!

寻找进口是一件需要检查的事情!如果排除了dist目录并正确设置了outDir

很有趣的是,你可以通过这个命令检查输入文件:

tsc --listFiles

当问题存在时,您将在列表中找到声明文件!

这有几个可能的原因。

In your tsconfig.json: Set outDir to "dist" or the name of another same-level folder. (prefixing with './' is unnecessary). This is where the build files go. Set allowJs to false or delete the line. Note: enabled, allowJs will conflict with the declaration setting/flag. It isn't enabled by default. Include "dist" (or your build folder) in exclude. In your package.json: Set main to "index" or some other chosen name. Don't prefix with the build folder (eg "dist/index"), nor the unnecessary "./". Set types (modern alias of typings) to "index". Adding the extensions (.d.ts or .js) is unnecessary.

虽然你可以有一百万种不同的方法,但是为了简单和加深理解,最好一开始坚持常用的实践——比如使用“dist”,简单的tsconfig。Json和包。Json文件在树的同一级别,以此类推。当然,查找node_modules的文件也会加深您的理解,但生活中还有更有意义的事情。

这个问题似乎已经通过更新到Typescript 2.3.x解决了

此外,使用Visual Studio 2017也是一个很大的改进。不过,我强烈建议您进行这两种更新。

我也有同样的问题。在我的例子中,这是选项:allowJs: true的结果。

所以我基本上要去掉这一行来消除错误。 我在您的代码中没有看到它,但它可能在这里对您有帮助。

当您尝试运行一个带有两个节点的项目时,很可能会发生这种情况。 对于这种假设,您可以在运行构建后测试名为“node”的计算机上的进程数。 我是怎么解决这个问题的:

步骤1。

比较

node -v

and

nvm -ls

,当前正在使用的版本。 在终端集中当前节点版本:

nvm use {neededVersion}

原则上,在nvm中删除节点的不必要版本(这将帮助IDE自动确定节点的正常版本)。

步骤2。

确定IDE中的当前节点。例如在WebStorm中: Node.js和NPM | Typescript:节点解释器-设置所需的版本。