同时使用pnpm和typescript时的类型检查问题

3qpi33ja  于 2023-01-27  发布在  TypeScript
关注(0)|答案(2)|浏览(552)

我从tutorial中了解到pnpm创建了符号链接.registry.npmjs.orgnode_modules下的其他入口点。我的项目在typescript上,我有@types用于node_modules中的键入。但是这个@types也在node_modules/.registry.npmjs.org/@types中。所以我得到了如下错误:
/node_modules/.registry.npmjs.org/@types/jquery/3.3.5/node_modules/@types/jquery/index.d.ts(32,14): error TS2300: Duplicate identifier 'jQuery'.
...以及
/node_modules/@types/jquery/index.d.ts(28,14): error TS2300: Duplicate identifier 'jQuery'.
tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": [
      "es5",
      "dom",
      "es2015.promise"
    ],
    "experimentalDecorators": true,
    "sourceMap": true,
    "allowSyntheticDefaultImports": true
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "scripts",
    "src/contracts"
  ]
}

有什么解决办法吗?

mnowg1ta

mnowg1ta1#

对我来说"typeRoots": ["./node_modules/@types"]起作用了。
默认情况下,tsc将在所有node_modules/@types文件夹中查找类型。
您可以通过调用tsc --listFiles来测试包含哪些文件。
我认为因为这个文件是由typescript本身包含的,那么它也将包含pnpm repo存储node_modules/.pnpm/@types中的所有文件。

xxx/node_modules/.pnpm/typescript@3.9.7/node_modules/typescript/lib/lib.es5.d.ts

在我的情况下,我有多个版本的React坐在那里得到阅读。

w46czmvw

w46czmvw2#

将此添加到我的tsconfig.json文件中对我很有效:

{
  "compilerOptions": {
    "preserveSymlinks": true
  }
}

相关问题