我正在尝试通过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。它为我工作。
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)
此配置后不再有错误。 注意:这并不意味着问题已经解决,但至少它允许我跳过导致错误的错误。由于我的应用程序正在按预期运行这一事实,我认为此时此错误无关紧要。
我怀疑这是因为您的包含部分:
"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”,“文件”和“包括” / “排除”在详细的配置选项。
对我来说,原来我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/ 等中的包。
正如@Muhammad bin Yusrat 在他的评论中所说,如果您刚刚将 angular 更新为 9 ,则运行npm i @types/node@latest(npm i @types/node不起作用!!)。这对我有用。
运行后,它还摆脱了另一个 ionic 5 控制台错误ionic serve-> 'refused to load image 'http:localhost:8100/favicon.ico' 因为它违反了以下内容安全策略......'(见下文)。
另一个“IteratorResult”错误是由“Spread Types”错误引起的。请参阅打字稿:传播类型只能从对象类型创建。基本上在您的代码中的某个地方,您使用了这样的扩展运算符return { id: doc.payload.id, ...doc.payload.data() };,您必须将其更改为这样,return { id: doc.payload.id, ...doc.payload.data() as {} }; 即添加as {}
| 归档时间: |
|
| 查看次数: |
10187 次 |
| 最近记录: |