打字稿,混淆“重复标识符”的错误信息
你能帮我理解为什么我得到这个以及更多这样的错误吗? 链接到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
没有任何files
部分。 从http://www.typescriptlang.org/docs/handbook/tsconfig-json.html
如果在tsconfig.json中没有“files”属性,编译器默认将所有文件包含在包含的目录和子目录中。 当指定“files”属性时,只包含那些文件。
- 包括
node_modules/typescript/
作为一个npm依赖:node_modules/typescript/
这意味着所有的typescript
都包括在内….在你的项目中有一个隐含的lib.d.ts
( http://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" ] }
问题通过简单的解决:
- 删除
node_modules
文件夹 - 运行
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。