我通常将tsconfig.json
设置为strict
来设置true
。这意味着noImplicitAny
也设置为true
。但是,设置strict
时,打字稿似乎忽略了我在本地创建的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/**/*" ]
}
我可以在上面的tsconfig.json
中添加以下内容,它将起作用:
{
"compilerOptions": {
...
"noImplicitAny": false,
...
}
}
这是我创建的一个示例项目来说明此问题:
https://github.com/marcoslin/tstyping-test
知道为什么会这样吗?
答案 0 :(得分:4)
noImplicitAny: false
并不能真正解决问题,只是忽略了它。由于找不到类型,template
将隐式键入为any
。您没有错误,但也没有类型安全性。
真正的问题是您指定了"types": [ "node" ],
,这意味着仅从typeRoots
中获取了节点模块的类型。参见docs。
最简单的解决方案是从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/**/*" ]
}