我正在尝试通过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.
我安装了@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"
]
}
如果我在全局范围内卸载typescript
并运行npx tsc
可以正常工作,但是在全局范围内安装和运行typescript
应该没有任何问题。毕竟,这就是在全局范围内进行安装的全部要点。
同时,我有一种解决方法,就是仅对tsc进行别名(我在Windows中使用git bash)。
alias tsc="path/to/project/node_modules/.bin/tsc.cmd"
答案 0 :(得分:44)
在GitHub上发现了一个相关问题-https://github.com/microsoft/TypeScript/issues/32333。 @rbuckton建议升级@types/node
。它为我工作。
答案 1 :(得分:18)
我在我的angular 8 App中遇到了is错误,尝试了此处提出的所有建议(包括已接受的答案)后无法解决问题。我不得不看一下以前的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
}
}
此配置后没有其他错误。 注意:这并不意味着问题已解决,但至少它使我可以跳过导致错误的错误。由于我的应用程序按预期运行,因此我现在认为此错误无关紧要。
答案 2 :(得分:4)
我怀疑是因为您的收录部分:
"include": [
"app/**/*.ts",
"app/**/*.tsx",
"test/**/*.ts",
"test/**/*.tsx",
"node_modules/@types/**/*.d.ts",
"./types/**/*.d.ts"
]
通常不需要显式包括* .d.ts文件。而且可能永远不会声明其他库(或节点类型)的文件。
tsconfig
的“排除” 部分默认排除"node_modules"
下的所有内容(以及其他内容)。当您添加"node_modules/@types/**/*.d.ts"
时,您将覆盖该排除项,而tsc尝试将其包括在内,但这些类型已经声明。
检查tsconfig.json上的Typescript文档,它解释了“ typeRoots” ,“文件” 和“ include” / < em>“排除” 配置选项的详细信息。
答案 3 :(得分:3)
对我来说,事实证明我在父目录项目中有一个node_modules
文件夹,类似于以下内容:
node_modules
my-project
- node_modules
由于node_modules
安装了较旧的@types/node
版本,因此出现了问题。对于我而言,解决方案不是更新@types/node
,而是删除那些node_modules
,因为我不是一开始就使用它们。
如果您实际上需要在具有不同类型的父目录中拥有一个node_modules
,并且这是您希望的样子,那么可以专门指定typeRoots
:
{
"compilerOptions": {
"module": "esnext",
"target": "es6",
"declaration": true,
"outDir": "./dist",
"typeRoots": ["./node_modules/@types/"]
},
"include": [
"src/**/*"
]
}
这样,就不会扫描父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/,依此类推。
答案 4 :(得分:2)
正如@Muhammad bin Yusrat在他的评论中所说,如果刚刚将angular更新为9,则运行npm i @types/node@latest
(npm i @types/node
无效!)。
运行ionic serve
->'拒绝加载映像'http:localhost:8100 / favicon.ico'后,它也摆脱了另一个ionic 5控制台错误,因为它违反了以下内容安全策略...。 ”(见下文)。
另一个“ IteratorResult”错误是由“ Spread Types”错误引起的。参见Typescript: Spread types may only be created from object types。
基本上在代码中的某个地方,您已经使用了像return { id: doc.payload.id, ...doc.payload.data() };
这样的扩展运算符,并且必须将其更改为return { id: doc.payload.id, ...doc.payload.data() as {} };
即添加as {}
答案 5 :(得分:2)
在tsconfig.json中的"skipLibCheck": true
中添加compilerOptions
。
这解决了问题。 Check here
答案 6 :(得分:1)
我刚刚通过运行删除了类型/节点
sudo npm remove @types/node
并通过运行以下命令再次安装,它对我有用。
sudo npm i @types/node
答案 7 :(得分:0)
只需在Angular项目的devDependencies中升级@types/node
:
npm i --save-dev @types/node
***请勿更改node_modules
中的任何内容***
答案 8 :(得分:-1)
我在搜索错误后发现了这个线程。我的问题是我以某种方式导致了不必要的导入,从而导致了此问题:
import { error } from 'protractor';
答案 9 :(得分:-1)
我通过注释其中的接口“ IteratorResult”声明之一来手动解决了此问题 node_modules/@types/node/index.d.ts文件。希望这会有所帮助。
答案 10 :(得分:-1)
这是我解决的方法:
npm uninstall --save-dev webpack
npm install --save-dev @angular-devkit/build-angular@latest