TypeScript:重复标识符'LibraryManagedAttributes'

Spe*_*pen 42 typescript reactjs

我有同样的问题:

React typescript(2312,14):重复标识符'LibraryManagedAttributes'

TypeScript错误:重复标识符'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.
Run Code Online (Sandbox Code Playgroud)

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

这是从哪里来的?我怎么能避免这种情况?

我想找出这个错误的来源,以便我可以向正确的实体报告,但我不知道从哪里开始.

我还能尝试什么?

小智 84

这似乎发生了,因为Yarn解析了一个包的多个版本; @types/react在这种特殊情况下.纱线@types/react从你的package.json中解析出来并作为依赖@types/react-dom.

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

"devDependencies": {
  "@types/react": "^15.0.16",
  "@types/react-dom": "^0.14.23"
  ...
}
Run Code Online (Sandbox Code Playgroud)

运行后创建的yarn.lockyarn install包含类似于此的内容:

"@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"
Run Code Online (Sandbox Code Playgroud)

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

解决方案是在package.json中添加一个resolution字段,告诉Yarn解析特定版本的.请参考以下示例:@types/react

"resolutions": {
  "@types/react": "^15.0.16"
}
Run Code Online (Sandbox Code Playgroud)

再跑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"
Run Code Online (Sandbox Code Playgroud)

Yarn现在"15.6.19"为两者"@types/react@*""@types/react@^15.0.16"依赖项解析相同的版本.

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

  • 您可以使用“yarn Why @types/react”来获取这些不同版本来自何处的更多信息。就我而言,我有 17.x 和 16.x 版本,后者来自我实际上并未使用的依赖项,因此我可以将其删除。 (4认同)
  • 锁定文件更新后,是否可以安全地删除“ resolutions”字段? (2认同)
  • 是的,创建新的锁定文件后,可以安全地删除分辨率配置。 (2认同)

Spe*_*pen 30

这似乎是打字稿问题.

我目前的解决方法是添加"skipLibCheck": truetsconfig.json.

我想强调,这只是一种解决方法,而不是解决问题.

  • 这个问题解决了吗?我只是尝试创建和应用程序并收到此错误。 (2认同)
  • 请注意,在tsconfig中添加“ skipLibCheck”:true是对代码库的类型安全性的潜在破坏性操作,并且很难撤消。 (2认同)

小智 17

我得到了同样的错误。我设法通过删除我的“@types/react”然后再次安装它们来修复它。

yarn remove @types/react
yarn add --dev @types/react
Run Code Online (Sandbox Code Playgroud)


mon*_*uen 17

对我来说,我不得不作出反应,重复的类型react-reduxreact以及react-intl当我升级react-intl。到目前为止对我有用的最少侵入性修复是运行这个:

npx yarn-deduplicate --packages @types/react yarn.lock

如果锁定文件的结果差异看起来正确,请继续并删除node_modules,然后yarn从已删除重复的锁定文件中获取新包。


Ben*_*uer 10

@types/react就我而言,当(v17.0.3) 和@types/react-dom(v17.0.2) 的版本号不同步时,就会出现错误。

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


Ric*_*ato 5

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


Sha*_*rde 5

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


tmv*_*nty 5

在我们的例子中,我们通过以下方式修复了它

  1. 将所有@types/*包移动到devDependencies

  2. rm -rf yarn.lockrm -rf node_modules

  3. yarn install再次运行