错误 TS6200:以下标识符的定义与另一个文件中的标识符冲突 (@types/jasmine)

Posted

技术标签:

【中文标题】错误 TS6200:以下标识符的定义与另一个文件中的标识符冲突 (@types/jasmine)【英文标题】:error TS6200: Definitions of the following identifiers conflict with those in another file (@types/jasmine) 【发布时间】:2019-08-11 02:23:34 【问题描述】:

我在尝试构建我的项目(使用 Angular CLI)时收到以下错误

ERROR in ../my-app/node_modules/@types/jasmine/index.d.ts(18,1): error TS6200: Definitions of the following identifiers conflict with those in another file: Expected, SpyObjMethodNames, clock, CustomEqualityTester, CustomMatcherFactory, ExpectationFailed, SpecFunction, SpyObj, jasmine

我正在使用 VSCode,当我转到有问题的行时,我可以选择查看它说它与之冲突的文件。

这会将我带到以下位置的文件:

/Users/<user_name>/Library/Caches/typescript/3.3/node_modules/@types/jasmine/ts3.1/index.d.ts

我有点不明白为什么 TS 编译器会尝试使用这个缓存的类型定义,这里会发生什么?

谢谢

【问题讨论】:

您是否尝试过删除 node_modules 和 package-lock.json,清除 npm 缓存(npm cache clean --force)并重新安装依赖项? 请您分享您的打字稿版本 感谢@TheParam - 我尝试了您建议的步骤,但仍然遇到相同的错误。我刚刚检查了 Angular CLI 在构建时使用的 TypeScript 版本及其在 3.2.4 上的版本,我看到我上面共享的缓存路径引用了 TS 的 3.3 版本,所以也许这就是问题所在,缓存副本与项目中 node_modules 文件夹中的副本之间的版本差异? 是的,这可能是问题所在。您可以删除缓存的文件夹并重新安装打字稿会有所帮助 你解决了吗?我也有类似的问题。 【参考方案1】:

刚刚在这里回答了同样的问题:Definitions of identifiers conflict with those in another file

再次发布。


检查tsconfig.spec.json 中的types 小节,很可能它有类似的东西

"types": [
  "jasmine",
  "node"
]

我删除了jasmine,所以我的types 部分看起来像这样:

"types": [
  "node"
]

它有帮助。

【讨论】:

【参考方案2】:

从 Angular 6.x 迁移到 8.x(typescript 3.5+)时遇到了同样的问题,@types/jasmine 类型文件(index.d.ts 和 3.1/index.d.ts)都在竞争彼此我通过以下方式解决了它:

快速概览

    从 package.json 中删除了 @types/jasmine,而是将其 3.1/index.d.ts 作为静态文件添加到我的源代码中。 由于@types/jasminewd2 引用@types/jasmine,也从package.json 中删除了这个lib 并添加为静态文件。 更改了一些配置文件以识别静态类型文件。 重新安装库

详细步骤

1.已移除:

来自 package.json 的条目

   "devDependencies": 
       ...
       "@types/jasmine": "3.4.0",
       "@types/jasminewd2": "2.0.6",
       ...
   

2。改为添加:

文件夹和文件到 src 文件夹下的文件结构

src (folder)
   ...
   @types
      jasmine
         index.d.ts (from node_modules/@types/jasmine/3.1/index.d.ts)
      jasminewd2
         index.d.ts (from node_modules/@types/jasminewd2/index.d.ts)

3.更改的配置:

tsconfig.json(其中 XXX 对应于您的文件夹结构)

   ...
   "typeRoots": [
      ...
      "src/ XXX /@types"
   ]
   ...

tsconfig.spec.json

   ...
   "types": [
      ...
      "jasminewd2"
   ]
   ...

4.重新安装库

运行npm install

一旦冲突将在稍后恢复

撤消上述步骤 重新安装软件包

npm install @types/jasmine --save-dev

npm install @types/jasminewd2 --save-dev

附加背景

由于在互联网上搜索仅显示 2 个类似的投诉,因此假设很接近,即上述解决方案只是一种解决方案,但必须有更好的解决方案(否则会有更多人抱怨这个问题)。可能是角度项目的配置中某处存在无法识别的错误,这可能导致在“我们使用低于 3.1 的打字稿”和“我们使用 3.1 以上的打字稿”之间做出决定的点是'在@types/jasmine 中是不可能的。

error TS6200: Definitions of the following identifiers conflict with those in another file (@types/jasmine) Definitions of identifiers conflict with those in another file

【讨论】:

【参考方案3】:

如果有人在使用 mangoose 时遇到此错误,则 5.11 默认情况下类型包含在 mongoose 中,因此只需从您的 devDependencies 中删除 @types/mongoose 即可。参考这个。 @types/mongoose - Type Definitions conflict with those in mongoose 5.11 #49950

【讨论】:

【参考方案4】:

对我来说,我在全球范围内安装了 typescript。

运行npm ls -g --depth 0 以查看您是否已全局安装。

运行npm uninstall -g typescript 删除。

【讨论】:

以上是关于错误 TS6200:以下标识符的定义与另一个文件中的标识符冲突 (@types/jasmine)的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2300:重复标识符“RequestInfo”

TS2300:重复标识符“路由器”

Visual Studio 2017 SmartDeviceException DEP6200 错误

仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)

错误 TS2300:重复标识符“导出 =”

ts-node 找不到我的类型定义文件