设置“noImplicitAny”时,Typescript忽略“typeRoots”
我通常将设置“noImplicitAny”时,Typescript忽略“typeRoots”,typescript,Typescript,我通常将tsconfig.json设置为strict设置为true。这意味着noImplicitAny也被设置为true。但是,当设置了strict时,typescript似乎忽略了本地创建的*.d.ts文件的typeRoots条目。下面是我使用的示例tsconfig.json: { "compilerOptions": { "declaration": true, "emitDecoratorMetadata": true, "exper
tsconfig.json
设置为strict
设置为true
。这意味着noImplicitAny
也被设置为true
。但是,当设置了strict
时,typescript似乎忽略了本地创建的*.d.ts
文件的typeRoots
条目。下面是我使用的示例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,
...
}
}
下面是我创建的一个示例项目,用于说明此问题:
知道为什么会这样吗
noImplicitAny:false
并不能真正解决问题,只是忽略了它<代码>模板将隐式键入为任何
,因为找不到任何类型。您不会得到任何错误,但也不会得到类型安全性
真正的问题是指定“类型”:[“节点”],
这意味着只有节点模块的类型取自类型根。看
最简单的解决方案是从tsconfig.json
中删除types
元素。此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/**/*" ]
}
谢谢你的回答。我添加了“类型”:[“节点”]
,以便识别节点对象。我正在检查我的其他项目,看看在我删除它之后它是否仍然有效。事实上,这就是解决方案。谢谢尽管奇怪的是它没有忽略“/node_modules/@types”目录中的任何其他类型。只有“/typings”中的那些文档()现在说:请记住,只有在使用带有全局声明的文件(而不是声明为模块的文件)时,自动包含才很重要。例如,如果使用import“foo”语句,TypeScript可能仍然会在node_modules和node_modules/@types文件夹中查找foo包。