TypeScript:重复的标识符“ IteratorResult”

dx_*_*_dt 30 typescript

我正在尝试通过tsc-我已经在全球安装的- 进行编译,但出现错误:

~/AppData/Roaming/nvm/v11.15.0/node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 - error TS2300: Duplicate identifier 'IteratorResult'.

41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
        ~~~~~~~~~~~~~~

  node_modules/@types/node/index.d.ts:170:11
    170 interface IteratorResult<T> { }
                  ~~~~~~~~~~~~~~
    'IteratorResult' was also declared here.

node_modules/@types/node/index.d.ts:170:11 - error TS2300: Duplicate identifier 'IteratorResult'.

170 interface IteratorResult<T> { }
              ~~~~~~~~~~~~~~

~/AppData/Roaming/nvm/v11.15.0/node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6
    41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
            ~~~~~~~~~~~~~~
    'IteratorResult' was also declared here.


Found 2 errors.
Run Code Online (Sandbox Code Playgroud)

我已@types/node安装版本10.1.0。(@latest有自己的问题...)

tsconfig.json

{
  "compilerOptions": {
    "target": "es2018",
    "moduleResolution": "node",
    "module": "commonjs",
    "jsx": "react",
    "lib": [
      "dom",
      "es2018",
      "dom.iterable",
      "scripthost"
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./types"
    ],
    "types": [],

    "alwaysStrict": true,
    "strictNullChecks": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,

    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,

    "sourceMap": true,

    "outDir": "dist"
  },
  "files": [
    "app/index.tsx"
  ],
  "include": [
    "app/**/*.ts",
    "app/**/*.tsx",
    "test/**/*.ts",
    "test/**/*.tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ],
  "exclude": [
    "dist"
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果我typescript在全球范围内卸载并运行,npx tsc则可以运行,但在typescript全球范围内安装和运行应该没有任何问题。毕竟,这就是在全球范围内进行安装的全部重点。

在此期间,我有一个解决方法是仅对tsc进行别名(我在Windows中使用git bash)。

alias tsc="path/to/project/node_modules/.bin/tsc.cmd"
Run Code Online (Sandbox Code Playgroud)

小智 31

在GitHub上发现了一个相关的问题-https: //github.com/microsoft/TypeScript/issues/32333。@rbuckton建议升级@types/node。它为我工作。

  • `npm install --save-dev @types/node` (45认同)
  • `npm update --save-dev @types/node` 更正确,因为它很可能是次要版本升级,请参阅[安装与更新](/sf/ask/873507561/ -更新有什么区别) (29认同)
  • 将项目升级到 Angular 9 后,我在运行 Storybook 时遇到此错误。我认为简单的“npm install @types/node”会安装我的 package.json 中已有的 types/node 版本,所以我做了“npm”安装@types/node@latest`并且它起作用了。 (21认同)

omo*_*tan 30

我在我的 angular 8 应用程序中遇到错误,并且在尝试了此处提出的所有建议(包括已接受的答案)后无法解决问题。我不得不查看以前编译没有错误的 angular 6 应用程序,并意识到我可以通过包含跳过库检查

“skipLibCheck”:真

到 tsconfig.json 文件。鉴于我的应用程序运行良好,没有问题,我决定采用这种方法。这是我的 tsconfig.json 文件的完整配置

{
    "compileOnSave": false,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "downlevelIteration": true,
        "experimentalDecorators": true,
        "module": "esnext",
        "moduleResolution": "node",
        "importHelpers": true,
        "target": "es2015",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "es2018",
            "dom"
        ],
        "skipLibCheck": true
    },
    "angularCompilerOptions": {
        "fullTemplateTypeCheck": true,
        "strictInjectionParameters": true
    }
}
Run Code Online (Sandbox Code Playgroud)

此配置后不再有错误。 注意:这并不意味着问题已经解决,但至少它允许我跳过导致错误的错误。由于我的应用程序正在按预期运行这一事实,我认为此时此错误无关紧要。


dan*_*elv 9

我怀疑这是因为您的包含部分:

"include": [
    "app/**/*.ts",
    "app/**/*.tsx",
    "test/**/*.ts",
    "test/**/*.tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ]
Run Code Online (Sandbox Code Playgroud)

您通常不需要明确包含 *.d.ts 文件。并且可能永远不会声明来自其他库(或节点类型)的文件。

tsconfig“排除”部分"node_modules"默认排除所有内容(除其他外)。当您添加时,"node_modules/@types/**/*.d.ts"您会覆盖该 exclude 和 tsc 尝试包含它们,但这些类型已经声明。

检查打字稿文档tsconfig.json,它解释了“typeRoots”“文件”“包括” / “排除”在详细的配置选项。

  • 对我来说,这是 tsconfig.json 中的这一行: ```"files": [ "./node_modules/@types/node/index.d.ts" ],``` 我从一些教程中获取的。您的回答有帮助! (2认同)

ber*_*ing 6

对我来说,原来我node_modules在父目录项目中有一个文件夹,类似于:

node_modules
my-project
- node_modules
Run Code Online (Sandbox Code Playgroud)

由于安装node_modules了旧版本@types/node,问题发生了。然而,在我的情况下,解决方案不是更新@types/node而是删除它们,node_modules因为我一开始没有使用它们。

如果您确实需要node_modules在具有不同类型的父目录中使用 a 并且这就是您想要的方式,那么您可以具体指定typeRoots

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es6",
    "declaration": true,
    "outDir": "./dist",
    "typeRoots": ["./node_modules/@types/"]
  },
  "include": [
    "src/**/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这样,node_modules就不会扫描父对象的类型。否则,请在此处阅读:https : //www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的 node_modules/@types 中的包都被认为是可见的;具体来说,这意味着 ./node_modules/@types/、../node_modules/@types/、../../node_modules/@types/ 等中的包。


Mar*_*ark 5

正如@Muhammad bin Yusrat 在他的评论中所说,如果您刚刚将 angular 更新为 9 ,则运行npm i @types/node@latestnpm i @types/node不起作用!!)。这对我有用。

运行后,它还摆脱了另一个 ionic 5 控制台错误ionic serve-> 'refused to load image 'http:localhost:8100/favicon.ico' 因为它违反了以下内容安全策略......'(见下文)。

运行离子服务后离子5错误

另一个“IteratorResult”错误是由“Spread Types”错误引起的。请参阅打字稿:传播类型只能从对象类型创建。基本上在您的代码中的某个地方,您使用了这样的扩展运算符return { id: doc.payload.id, ...doc.payload.data() };,您必须将其更改为这样,return { id: doc.payload.id, ...doc.payload.data() as {} }; 即添加as {}

  • 只需从 Angular 8 升级到 9,``npm install --save-dev @types/node@latest``` 修复了“IteratorResult”错误,谢谢! (2认同)

Pus*_*ama 5

skipLibCheck: true在 tsconfig.json中添加compilerOptions

这解决了这个问题。检查这里

  • 这应该是最后的手段。它不能解决问题。它只是隐藏它。 (2认同)