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


224

为什么会出现这种错误以及更多此类错误?我在下面添加了指向仓库的链接以及关键代码段。我认为我对依赖关系和“包含”链接的工作方式有一个基本的误解。

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'.

所有代码都可以在这里找到

我的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文件。
yangmillstheory

1
为什么需要typings.jsonAND tsd.d.ts
CodyBugstein 2016年

我将解决方案放在这里,您可以看到。stackoverflow.com/questions/40404353/...
hüseyint

Answers:


126

这是由于两件事的结合:

固定

无论是列表filesinclude明确https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
还是全局安装打字稿?
Ryan Cavanaugh 2015年

2
是的,我不知道为什么会在本地显示它:)我以为他可能需要它使用一些api(事后看来,这不太可能)
basarat 2015年

是的,这就是问题所在。和@basarat,我还不成熟,所以我在本地和全球都拥有它只是一个疏忽。或者,在我的辩护中,在我来自的红宝石世界中这样做并没有害处,所以那是我的背景:)仍然添加到响应中的信息将继续为我提供帮助。那谢谢啦。你们俩!
pitosalas 2015年

5
使用exclude财产
basarat

6
Github链接已断开
Denny

70

更新:Typings的1.0版更改了输出结构,以下答案与1.0版之前的版本有关。

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

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

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

因此,根据所需的版本,应排除(或包括)“浏览器”或“主”类型的文件,但不能同时包括两者,因为这是重复项的来源。

本《打字》杂志对此进行了更多讨论。


真棒,这解决了重复标识符错误的问题,因为您的项目中包括打字:)
magicode118 2016年

为什么不仅仅排除“类型”?键入仅适用于开发人员时间,而不适用于运行时?
埃里克·哈特福德

这定义了在编译时在哪里找到类型。如果排除“类型”,则无法再找到任何类型。这里有一个问题是它正在尝试编译并且有重复的类型。TypeScript不是运行时,它将代码转换为JavaScript。
RationalDev喜欢GoFundMonica

2
在VS2017中,我必须在.NETCore2 MVC应用程序中排除“ bin”,“ obj”
OSP

在此问题上,我与OSP有相同的问题。obj文件夹中包含TypeScript文件,因此它们显示为重复项。每当我每次构建时,它都会引起问题,然后在每次更改构建类型后,每次构建时都会引起问题。
Grungondola

24

如果您已经在“打字”文件夹下单独安装了打字

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

2
啊,是的-在排除类型中添加类型可以修复我的错误。
cport1年

1
我在/ obj下也有一个副本,这导致了来自“ Typescript Virtual Projects”的错误。添加“ obj”以排除固定的那些。
2016年

这完全破坏了我的构建,因为缺少类型。
Spenhouet

21

解决问题的方法很简单:

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

就我而言,问题是在更改Git分支后发生的,其中一个新分支正在使用一组不同的节点模块。旧分支使用TypeScript v1.8,新分支使用v2.0


1
是的,这对我有用。首先,我无法删除node_modules,因为它说需要管理员权限才能删除它。我的用户帐户具有管理员访问权限;真正的问题是我需要关闭正在使用该文件夹的程序。
德鲁

15

我只是遇到了这个问题。当我运行时npm start,我遇到了一堆重复的标识符错误。

解:

从项目根文件夹运行:

rm -r typings
typings install
npm start

一切正常。


对我来说,我从使用Polyfill的使用es6-shim方式切换为使用core-js,这是可行的解决方案。一种比较宽松的方法是使用typings prune
StriplingWarrior

为我工作。但是,应该猜应该有“ npm install”而不是“
typings

我没有typings文件夹:(
Jamie Hutber

12

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

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

4
我有这个完全相同的问题。此修复程序不适用于我。我正在使用Typescrip 1.75。我在Typescript Github存储库中发布了一个问题
巴特

1
如果您使用的是打字而不是TSD,则应使用@RationalDev提出的解决方案
例如2016年

4

就我而言,我得到的错误是

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

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

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


3

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

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

我也有webpack这个错误,只是重新启动服务器修复它。
克林特(Clint)”,

1

我遇到了此问题,原因是磁盘上有一个意外的文件夹(jspm_packages不再使用),该文件夹未被源代码控制跟踪(并隐藏在我的IDE中)。其中重复安装了TypeScript,从而导致了问题。

有点极端的情况,但在此留个答案,以防万一其他人正在寻找这种解决方案。


与我相似。我在Visual Studio Code中重命名了一个打字稿文件,该文件导致了一个不可见的(孤立的).js文件,该文件不再在IDE中显示,但仍显示重复的标识符错误。
DAG

0

我遇到了这个问题,结果发现我的项目中有另一个本不应该存在的node_modules文件夹:-(


有些库的文件夹中有node_modules。当我使用节点4.6.0时,它从未造成任何问题,但是对于节点6.9.0,它突然抛出了该错误。
heman123 '16

想知道此问题开始于哪个版本。我遇到了节点5.6.0的问题。
2016年

0

在将tsconfig.json更改为target:“ es2015”和module:“ es2015”之后,与其他错误一起出现了。

/// <reference path="../../typings/index.d.ts" />main.ts文件中使用的基础(AngularJS2快速入门)。为了解决这个问题,我必须删除该行。


0

我们从网站文件夹中删除了一个lib文件夹。这是由先前安装的类型创建的。这成为重复。当它被删除时,它起作用了!


0

这可能是因为节点文件夹中同时具有类型和依赖项。因此,请首先检查@types文件夹中的内容,如果它们具有相关性,请删除重复项。对我来说是core.js


0

从package.json文件中删除此@ types / express-validator,然后运行npm install

阅读更多

作者消息:不推荐使用此软件包。这是express-validator(https://github.com/ctavan/express-validator)的存根类型定义。express-validator提供了自己的类型定义,因此您不需要安装@ types / express-validator!



-2

我遇到了类似的问题。只需将tsconfig.json从项目的根目录移至其他范围即可。在我的项目中,我将tsconfig.json从根目录移到了wwwroot。


-2

完全关闭解决方案并重新运行项目解决了我的问题。


不知道你为什么被拒绝。阅读您的答案后,我单击了IntelliJ中的“ Invalidate Caches and Restart”,问题已解决,所以谢谢!
约翰内斯·斯塔德勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.