打字稿,混淆“重复标识符”的错误信息

你能帮我理解为什么我得到这个以及更多这样的错误吗? 链接到github以及下面的关键代码片段。 我想我对“依赖”和“包含”链接如何工作有一个基本的误解。 谢谢!

csvproc(master)> tsc node_modules/typescript/bin/lib.core.d.ts(83,5): error TS2300: Duplicate identifier 'configurable'. node_modules/typescript/bin/lib.core.d.ts(84,5): error TS2300: Duplicate identifier 'enumerable'. node_modules/typescript/bin/lib.core.d.ts(85,5): error TS2300: Duplicate identifier 'value'. node_modules/typescript/bin/lib.core.d.ts(86,5): error TS2300: Duplicate identifier 'writable'. 

所有的代码可以在这里find 。

我的tsconfig.json:

 { "compilerOptions": { "module": "commonjs", "noImplicitAny": false, "outDir": "built/", "sourceMap": true, "target": "es5" } } 

我的tsd.json:

 { "version": "v4", "repo": "borisyankov/DefinitelyTyped", "ref": "master", "path": "typings", "bundle": "typings/tsd.d.ts", "installed": { "node/node-0.10.d.ts": { "commit": "6387999eb899d0ba02d37dd8697647718caca230" }, "should/should.d.ts": { "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4" } } } 

我的tsd.d.ts:

 { "version": "v4", "repo": "borisyankov/DefinitelyTyped", "ref": "master", "path": "typings", "bundle": "typings/tsd.d.ts", "installed": { "node/node-0.10.d.ts": { "commit": "6387999eb899d0ba02d37dd8697647718caca230" }, "should/should.d.ts": { "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4" } } } 

这是因为两件事的结合:

如果在tsconfig.json中没有“files”属性,编译器默认将所有文件包含在包含的目录和子目录中。 当指定“files”属性时,只包含那些文件。

  • 包括node_modules/typescript/作为一个npm依赖: node_modules/typescript/这意味着所有的typescript都包括在内….在你的项目中有一个隐含的lib.d.tshttp://basarat.gitbooks.io/typescript/ content / docs / types / lib.d.ts.html )以及与NPM版本的打字稿相冲突。

固定

要么显式列出files要么有类似atom-typescript的东西为你生成这个键: https : //github.com/TypeStrong/atom-typescript/blob/master/docs/tsconfig.md#filesglob

更新 :版式1.0版本改变了输出结构,下面的答案与1.0版本有关。

如果您在tsconfig.json中使用了Typings并排除,则可能会遇到重复types的问题,并且需要如下所示的内容:

 { "exclude": [ "typings/browser.d.ts", "typings/browser", "node_modules" ] } 

为了简化与TypeScript的集成,将生成两个文件 – typings / main.d.ts和typings / browser.d.ts – 它们引用项目中安装的所有types,一次只能使用其中一个。

因此,取决于您需要的版本,您应该排除(或包含)“浏览器”或“主要”types文件,但不能同时包含这两个文件,因为这是重复文件的来源。

这种types问题更多地讨论它。

如果您已在typings文件夹下分别安装了打字

 { "exclude": [ "node_modules", "typings" ] } 

我刚碰到这个问题。 当我运行npm start ,出现了一堆重复的标识符错误。

解:

从项目根文件夹运行:

 rm -r typings typings install npm start 

一切正常。

您也可以使用tsconfig.json文件中的exclude选项,如下所示:

 { "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": false, "noImplicitAny": false, "removeComments": true, "noLib": false, "emitDecoratorMetadata": true, "experimentalDecorators": true }, "exclude": [ "node_modules" ] } 

问题通过简单的解决:

  1. 删除node_modules文件夹
  2. 运行npm install来获取所有正确版本的软件包

在我的情况下,更改Git分支后发生了问题,其中一个新的分支正在使用不同的节点模块集。 旧的分支使用TypeScript v1.8,新的v2.0

使用webpack我遇到了同样的错误,以防万一您的tsconfig.json和node_modules中的.d.ts文件解决了我的问题:

 "exclude": [ "node_modules", "typings/main", "typings/main.d.ts", "typings/index.d.ts" ] 

在我的情况下,我得到了错误

node_modules/@types/es6-promise/index.d.ts(11,15):错误TS2300:重复标识符'Promise'。

我的package.json有@types/es6-promise ,但是我的tsconfig已经有了target: "es6" 。 所以我猜想在编译时与Promise有冲突。

从我的package.json文件中删除@types/es6-promise解决了这个问题。

我有一个意外的文件夹在磁盘上( jspm_packages ,不再被使用),而不是由源代码pipe理(并从我的IDE隐藏)跟踪这个问题。 这有一个重复安装的TypeScript,它导致了问题。

一个边缘的情况下,但在这里留下一个答案,以防其他人正在寻找这个解决scheme。

我有这个问题,事实certificate我有一个第二个node_modules文件夹在我的项目中不应该在那里:-(

在将我的tsconfig.json更改为目标:“es2015”和模块:“es2015”之后,出现了此错误。

基础(AngularJS2 quickstart)在main.ts文件中使用/// <reference path="../../typings/index.d.ts" /> 。 为了解决这个问题,我不得不删除那条线。

我们从网站文件夹中删除了一个lib文件夹。 这是由以前安装types创build的。 这变成了重复。 当这被删除它的工作!

这可能是因为您的节点文件夹中既有键入又有依赖关系。 所以首先检查你在@types文件夹中有什么,如果你有他们的依赖,删除重复。 对我来说这是core.js

我遇到了类似的问题。 简单地将我的tsconfig.json从我的项目的根目录移动到另一个范围帮助。 在我的项目中,我将tsconfig.json从根移到了wwwroot。