TypeScript:重复的标识符“ LibraryManagedAttributes”

时间:2018-09-19 06:53:29

标签: reactjs typescript

我遇到了与以下问题相同的问题:

React typescript (2312,14): Duplicate identifier 'LibraryManagedAttributes'

TypeScript error: Duplicate identifier 'LibraryManagedAttributes'

但是我找不到任何解决方案。

我已经升级到最新的node / npm / yarn / typescript版本。还尝试降级。没有任何帮助。

yarn build --verbose
yarn run v1.9.4
$ react-scripts-ts build --verbose
Creating an optimized production build...
Starting type checking and linting service...
Using 1 worker with 2048MB memory limit
ts-loader: Using typescript@3.0.3 and C:\dev\project\frontend\tsconfig.prod.json
Warning: member-ordering - Bad member kind: public-before-private
Failed to compile.

C:/dev/project/frontend/node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
(2312,14): Duplicate identifier 'LibraryManagedAttributes'.


error Command failed with exit code 1.

--verbose不能给我更多信息。

我看到LibraryManagedAttributes的定义是:

  • node_modules/@types/react/index.d.ts
  • node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
  • node_modules/@types/react-overlays/node_modules/@types/react/index.d.ts
  • ....

这是哪里来的?如何避免这种情况?

我想找出错误的出处,以便将其报告给正确的实体,但我不知道从哪里开始。

我还能尝试什么?

16 个答案:

答案 0 :(得分:62)

这似乎是发生的,因为Yarn可以解析一个程序包的多个版本。 @types/react在这种情况下。 Yarn从package.json中将@types/react解析为@types/react-dom的依赖项。

从我的 package.json 中获取以下代码段:

"devDependencies": {
  "@types/react": "^15.0.16",
  "@types/react-dom": "^0.14.23"
  ...
}

运行yarn install后创建的 yarn.lock 包含类似于以下内容的内容:

"@types/react-dom@^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/react@*":
  version "16.4.14"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.14.tgz#47c604c8e46ed674bbdf4aabf82b34b9041c6a04"
  dependencies:
    "@types/prop-types" "*"
    csstype "^2.2.0"

"@types/react@^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

请注意,@types/react-dom取决于@types/react所指示的"*"的任何版本。 Yarn解析@types/react的两个版本:"16.4.14""15.6.19"。这会导致您提到的类型冲突。

解决方案是在您的 package.json 中添加一个resolutions field,以告诉Yarn解析特定版本的@types/react。采取以下示例:

"resolutions": {
  "@types/react": "^15.0.16"
}

再次运行yarn install。请注意 yarn.lock 文件中的更改:

"@types/react-dom@^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/react@*", "@types/react@^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

纱线现在为"15.6.19""@types/react@*"依赖关系解析相同的版本"@types/react@^15.0.16"

我想知道为什么需要这样做。我希望Yarn能够理解它可以使用"@types/react" "*"来解决依赖项"@types/react@^15.0.16"而不是使用最新版本的@types/react来解决它。

答案 1 :(得分:22)

这似乎是打字稿问题。

我当前的解决方法是将"skipLibCheck": true添加到tsconfig.json

我想强调的是,这只是一种解决方法,而不能解决其自身的问题。

答案 2 :(得分:4)

对我来说,升级GET /house/mapping时,我的反应类型在react-reduxreactreact-intl中重复。到目前为止,对我来说最不易受干扰的修复程序是运行以下命令:

react-intl

如果锁文件的结果差异正确,请继续删除npx yarn-deduplicate --packages @types/react yarn.lock,然后删除node_modules,以从重复数据删除的锁文件中获取新软件包。

答案 3 :(得分:2)

对我来说,最简单的解决方法是删除我的node_modules目录和yarn.lock / package-lock文件,然后执行yarn安装来重新安装所有节点模块。

答案 4 :(得分:2)

yarn upgrade @types/react-router-dom之后,我遇到了同样的问题。 git diff显示已解析的@types/react的多个版本。就我而言,yarn upgrade @types/react解决了该问题。删除yarn.lock应该会有所帮助。

似乎全新安装(没有yarn.lock)会将软件包解析为一致状态,但是部分升级不会全局解析依赖项。因此,可能需要进行手动调整才能升级所有涉及的软件包。

答案 5 :(得分:2)

在我们的情况下,我们通过

对其进行了修复
  1. 将所有@types/*软件包移动到devDependencies

  2. rm -rf yarn.lockrm -rf node_modules

  3. 再次运行yarn install

答案 6 :(得分:1)

我遇到了同样的错误。我设法通过删除“ @ types / react”并重新安装来解决此问题。

yarn remove @types/react
yarn add @types/react

答案 7 :(得分:1)

与该问题有关,从package.json目录运行npm list @types/react应该列出在项目中找到的重复类型定义。

答案 8 :(得分:1)

C:/Users/japa/source/repos/ReactTestApp/TemplateExample/ClientApp/node_modules/@types/react/index.d.ts
TypeScript error in C:/Users/japa/source/repos/ReactTestApp/TemplateExample/ClientApp/node_modules/@types/react/index.d.ts(2835,14):
Duplicate identifier 'LibraryManagedAttributes'.  TS2300

就我而言,我需要手动解决问题(使用TS2300中所述的原理)。一旦我将ReactKendo添加到我的项目中,问题就出现了。

  1. 转到我的项目ClientApp中的ClientApp\node_modules\@types目录
  2. 备份react目录,然后将其删除
  3. 清洁+构建+运行项目,并且不再发生上述错误
  4. 在错误消失并且错误似乎永远消失之后,我恢复了react文件夹,因此在我看来,这就像是宇宙中某个地方的典型魔术错误:-)

我不需要更改配置文件中的其他任何内容。

答案 9 :(得分:1)

使用yarn-deduplicate为我解决了这个问题。

步骤:

  1. 可选安装yarn-deduplicate软件包或在第二步中使用npx
npm install -g yarn-deduplicate

yarn global add yarn-deduplicate
  1. 运行yarn-deduplicate
yarn-deduplicate yarn.lock --packages @types/react yarn.lock

npx yarn-deduplicate --packages @types/react yarn.lock
  1. 删除node_modules文件夹
rm -rf node_modules
  1. 重新安装依赖项
yarn install

答案 10 :(得分:1)

在我的例子中,当 @types/react (v17.0.3) 和 @types/react-dom (v17.0.2) 的版本号不同步时出现错误。

为了解决这个问题,我删除了 @types/react,因为它是从 @types/react-dom 上吊起来的。您可以通过执行 yarn why @types/react 来验证这一点。

答案 11 :(得分:0)

在我的情况下,我收到错误消息,指出在两个不同的位置声明了“ LibraryManagedAttributes”。遵循这些路径,我意识到已安装的模块还具有package.json文件,该文件还添加了“ @ types / react”作为dep,并且其版本与根package.json文件中的版本不同。我将这两个更改为相同的版本,问题得以解决。

答案 12 :(得分:0)

我在我使用的另一个模块中对版本请求有冲突。修复该问题并重新安装yarn还是没有帮助。

使用NPM代替Yarn却为我解决了。

希望这对某人有帮助。

答案 13 :(得分:0)

对我有用的是从react中删除@types/reactpackage.json,然后在zsh中:

rm -rf node_modules/**/react
npm i react @types/react

答案 14 :(得分:0)

对我来说,这仅是由引用的@types/react-redux引起的。由npm i --save-dev @types/react修复,因此package.json看起来像这样:

  ...
  "devDependencies": {
    "@types/react": "^16.9.19",
    "@types/react-redux": "^7.1.7"
    ...
  }

答案 15 :(得分:0)

在处理链接依赖项时遇到了这个问题。我的链接程序包位于lerna存储库中,并且具有@types/react作为devDependency。我将@types/react添加为peerDependency,将工作流切换为yalc,并能够继续。