令人困惑的“重复标识符”打字稿错误消息

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.jsontsd.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 附带的冲突。

修复

明确列出filesinclude 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:检查文件中是否存在重复导入,出现错误。

【讨论】:

以上是关于令人困惑的“重复标识符”打字稿错误消息的主要内容,如果未能解决你的问题,请参考以下文章

测试类型脚本应用程序出现许多重复标识符错误

打字稿错误 TS1005: ';'预期(二)

为啥此语句会引发打字稿错误?

无法重新声明块范围变量(打字稿)

打字稿和 Knex

打字稿:使用 ts-node-dev 导入表达意外的标识符