我通常设置我tsconfig.json的strict设置true.这意味着noImplicitAny也是如此true.但是,strict设置时,typescript似乎忽略typeRoots了本地创建*.d.ts文件的条目.这是tsconfig.json我使用的示例:
{
"compilerOptions": {
"declaration": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [ "es2017" ],
"module": "CommonJS",
"noImplicitReturns": true,
"outDir": "lib",
"removeComments": true,
"sourceMap": true,
"strict": true,
"target": "es2017",
"typeRoots": [ "./typings", "./node_modules/@types" ],
"types": [ "node" ],
},
"compileOnSave": true,
"include": [ "./src/**/*" ]
}
Run Code Online (Sandbox Code Playgroud)
我可以在tsconfig.json上面添加以下内容,它将起作用:
{
"compilerOptions": {
...
"noImplicitAny": false,
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我创建的示例项目,用于说明此问题:
https://github.com/marcoslin/tstyping-test
知道为什么会这样吗?
noImplicitAny: false并没有真正解决问题,它只是忽略了它。template将被隐式键入,any因为找不到类型。你没有错误,但也没有类型安全。
真正的问题是您指定"types": [ "node" ],这意味着只有节点模块的类型是从typeRoots. 请参阅文档。
最简单的解决方案是types从tsconfig.json. 这个 tsconfig 没有给出任何错误:
{
"compilerOptions": {
"declaration": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [ "es2017" ],
"module": "CommonJS",
"noImplicitReturns": true,
"outDir": "lib",
"removeComments": true,
"sourceMap": true,
"strict": true,
"target": "es2017",
"typeRoots": [ "./typings", "./node_modules/@types" ]
},
"compileOnSave": true,
"include": [ "./src/**/*" ]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |