令人困惑的“重复标识符”打字稿错误消息
Posted
技术标签:
【中文标题】令人困惑的“重复标识符”打字稿错误消息【英文标题】:Confusing "duplicate identifier" Typescript error message 【发布时间】:2015-09-28 03:01:25 【问题描述】:为什么会出现这种错误以及更多此类错误?我正在添加一个指向 repo 的链接以及下面的关键代码 sn-ps。我想我对依赖和“包含”链接的工作方式有一个基本的误解。
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'.
All code can be found here.
我的 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"
【问题讨论】:
您的tsd.d.ts
可能看起来像几个参考标签,而不是 JSON 文件。
为什么需要typings.json
和tsd.d.ts
?
我把解决方案放在这里,你可以看看。 ***.com/questions/40404353/…
【参考方案1】:
这是因为两件事的结合:
tsconfig
没有任何 files
部分。来自http://www.typescriptlang.org/docs/handbook/tsconfig-json.html
如果 tsconfig.json 中没有“files”属性,编译器默认包含包含目录和子目录中的所有文件。指定“文件”属性时,仅包含这些文件。
将typescript
包含为npm 依赖项:node_modules/typescript/
这意味着所有typescript
都被包含...。无论如何,您的项目中都隐含包含lib.d.ts
(http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts.html) 和它与 NPM 版本的 typescript 附带的冲突。
修复
明确列出files
或include
https://basarat.gitbook.io/typescript/docs/project/files.html ?
【讨论】:
还是全局安装 typescript? 是的,我不知道为什么它在本地 :) 我认为他可能需要一些 api (事后看来……不太可能) RyanCavanaugh 是的,这就是问题所在;和@basarat,我还不成熟,所以我在本地和全球都有它只是一个疏忽。或者在我的辩护中,在我来自的红宝石世界中这样做不会伤害任何事情,所以这就是我的背景:) 你添加到你的回复中的信息仍然继续为我完成图片。那谢谢啦。你们俩! 使用exclude
属性
Github 链接已损坏【参考方案2】:
您也可以像这样在 tsconfig.json 文件中使用 exclude 选项:
"compilerOptions":
"target": "es5",
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
,
"exclude": [
"node_modules"
]
【讨论】:
我遇到了同样的问题。此修复程序对我不起作用。我正在使用打字稿 1.75。我发布了an issue in the Typescript Github repo。 如果您使用的是类型化而不是 TSD,您应该使用@RationalDev 提出的解决方案【参考方案3】:更新:1.0 版的 Typings 更改了输出结构,以下答案与 1.0 之前的版本有关。
如果您在 tsconfig.json 中使用 Typings 并排除,您可能会遇到重复类型的问题并需要以下内容:
"exclude": [
"typings/browser.d.ts",
"typings/browser",
"node_modules"
]
为了简化与 TypeScript 的集成,会生成两个文件 - typings/main.d.ts 和 typings/browser.d.ts - 引用项目中安装的所有类型,一次只能使用其中一个。
因此,根据您需要的版本,您应该排除(或包含)“浏览器”或“主要”类型的文件,但不能同时排除,因为这是重复的来源。
This Typings issue 讨论更多。
【讨论】:
太棒了,这解决了在您的项目中包含 Typings 的重复标识符错误的问题 :) 为什么不排除“打字”?打字只适用于开发时间,不是运行时吗? 这是定义在编译时在哪里找到类型。如果您排除“类型”,您将无法再找到任何类型。这里的问题是它正在尝试编译并且有重复的类型。 TypeScript 不是运行时,它会将您的代码转换为 javascript。 在 VS2017 中,我不得不在 .NETCore2 MVC 应用程序中排除“bin”、“obj” 我在这个问题上遇到了与 OSP 相同的问题。 obj 文件夹中包含 TypeScript 文件,因此它们显示为重复项。每次我第一次构建时都会出现问题,然后在我更改构建类型后每次构建时都会出现问题。【参考方案4】:如果你在typings文件夹下单独安装了typings
"exclude": [
"node_modules",
"typings"
]
【讨论】:
啊是的 - 将类型添加到我的排除修复了我的错误。 我在 /obj 下也有一个副本,这导致来自“Typescript Virtual Projects”的错误。添加“obj”以排除固定的那些。 这完全破坏了我的构建,并且缺少打字。 针对我的情况工作,我在 Cordova 项目中。我还必须排除“平台”文件夹。【参考方案5】:我刚刚遇到了这个问题。当我运行npm start
时,我得到了一堆重复的标识符错误。
解决方案:
从项目根文件夹运行:
rm -r typings
typings install
npm start
一切正常。
【讨论】:
对我来说,我的 polyfill 从使用es6-shim
切换到使用 core-js
,这是可行的解决方案。一个不那么严厉的方法是使用typings prune
。
为我工作。但猜测应该是“npm install”而不是“typings install”
我没有typings
文件夹:(【参考方案6】:
我遇到了这个问题,原因是磁盘上有一个意外文件夹(jspm_packages
,不再使用),它没有被源代码管理跟踪(并且从我的 IDE 中隐藏)。这其中有重复安装的 TypeScript,这导致了问题。
有点极端情况,但在这里留下答案,以防其他人正在寻找这个解决方案。
【讨论】:
和我一样。我在 Visual Studio Code 中重命名了一个打字稿文件,这导致了一个不可见(孤立的).js 文件,该文件不再显示在 IDE 中,但仍然显示重复标识符错误。【参考方案7】:我遇到了这个问题,结果发现我的项目中有第二个 node_modules 文件夹不应该存在:-(
【讨论】:
有些库的文件夹中有 node_modules。当我使用节点 4.6.0 时,它从未产生任何问题,但使用节点 6.9.0 时,它突然抛出该错误。 想知道这个问题是从哪个版本开始的。我遇到了节点 5.6.0 的问题。【参考方案8】:使用 webpack 我遇到了同样的错误,以防在 tsconfig.json 中排除 .d.ts
文件,并且 node_modules 解决了我的问题:
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts",
"typings/index.d.ts"
]
【讨论】:
我的 webpack 也出现了这个错误,重启服务器就解决了。【参考方案9】:在我将 tsconfig.json 更改为 target:"es2015" 和 module:"es2015" 之后,我遇到了这个错误。
基础(AngularJS2 快速入门)在 main.ts 文件中使用了/// <reference path="../../typings/index.d.ts" />
。为了解决这个问题,我不得不删除该行。
【讨论】:
【参考方案10】:问题解决了:
-
删除
node_modules
文件夹
运行 npm install
以获取所有具有正确版本的软件包
在我的例子中,问题发生在更改 Git 分支之后,其中一个新分支使用了一组不同的节点模块。旧分支使用 TypeScript v1.8,新分支使用 v2.0
【讨论】:
是的,这对我有用。起初我无法删除 node_modules ,因为它说需要管理员访问权限才能删除它。我的用户帐户具有管理员权限;真正的问题是我需要关闭正在使用该文件夹的程序。 它给我带来了很多编译问题 它对我有用。我刚刚删除了 *.lock 文件并重新安装。【参考方案11】:我们从网站文件夹中删除了一个 lib 文件夹。这是由先前安装的类型创建的。这变得重复了。当它被删除时,它起作用了!
【讨论】:
【参考方案12】:在我的情况下,我得到了错误
node_modules/@types/es6-promise/index.d.ts(11,15): error TS2300: Duplicate identifier 'Promise'。
我的 package.json 中有 @types/es6-promise
,但我的 tsconfig
已经在 target: "es6"
中。所以我猜编译的时候和Promise
有冲突。
从我的package.json
文件中删除@types/es6-promise
解决了这个问题。
【讨论】:
【参考方案13】:我遇到了类似的问题。只需将我的 tsconfig.json 从项目的根目录移动到不同的范围即可。在我的项目中,我将 tsconfig.json 从根目录移至 wwwroot。
【讨论】:
【参考方案14】:这可能是因为您的节点文件夹中同时存在类型和依赖关系。 所以首先检查你的 @types 文件夹中有什么,如果你有依赖项,请删除重复项。 对我来说是 core.js
【讨论】:
【参考方案15】:从 package.json 文件中删除这个 @types/express-validator,然后运行 npm install
Read More
作者寄语: 此软件包已被弃用 这是 express-validator (https://github.com/ctavan/express-validator) 的存根类型定义。 express-validator 提供了自己的类型定义,所以你不需要安装@types/express-validator!
【讨论】:
【参考方案16】:运行以下命令将解决此问题。
npm install @types/node --save-dev
【讨论】:
【参考方案17】:完全关闭解决方案并重新运行项目解决了我的问题。
【讨论】:
不知道为什么你被否决了。阅读您的答案后,我在 IntelliJ 中单击“使缓存无效并重新启动”,问题已解决,谢谢! 或者只是重新检查 IntelliJ 中 Typescript 选项卡中的 typescript 错误【参考方案18】:将"typeRoots": ["node_modules/@types"],
添加到 tsconfig.json 文件中的“compilerOptions”对我有用。
【讨论】:
【参考方案19】:Angular 的(可能的)解决方案
就我而言,在安装@angularfire 时。它自动从我的环境文件中导入environment
。这给出了Duplicate identifier 'environment'
错误。
但是,我已经在同一个文件中进行了此导入,因此导致了重复标识符错误。
我创建了一个新项目并一步一步地找到了这个错误......
TL;DR:检查文件中是否存在重复导入,出现错误。
【讨论】:
以上是关于令人困惑的“重复标识符”打字稿错误消息的主要内容,如果未能解决你的问题,请参考以下文章