当我在app.ts的开头添加以下行
const crypto = require('crypto');
我收到以下错误,
无法重新声明块范围变量'crypto'
好像它已经从其他地方全局导入,这就是我的tsconfig.json的样子
{
"compilerOptions": {
"allowJs": true,
"outDir": "./dist",
"target": "ES6",
"module": "commonjs",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false,
"strictNullChecks": true,
"noUnusedLocals": true,
"types": [
"node"
],
"typeRoots": [
"./node_modules/@types"
],
"lib": ["es2015", "dom"]
},
"include": [
"./src/"
]
}
PS:上面的错误是我试图从终端转发它 . 我使用VisualStdioCode,在VisualStdioCode中它没有显示任何错误,因为它指向,
/ path / to / VisualStdioCode / Visual Studio Code.app/Contents/Resources/app/extensions/typescript/node_modules/typescript/lib/lib.dom.d.ts
编辑(已解决):这里的问题与cannot redeclare block scoped variable (typescript)略有不同 . 这个问题的目的是检测重复的导入源,而不是使用ES6非显式赋值来为我们自动解决它 . 这里的解决方案是从libs或node_modules导入,而不是在它的答案中提到的范围 .
1 回答
crypto
已经是浏览器中的全局只读属性,因此TypeScript会阻止您尝试覆盖它 .https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto
但是既然你正在使用commonJS,你可能正在为Node构建,也许你并不是要在“lib”中包含“dom”类型?