Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置“noImplicitAny”时,Typescript忽略“typeRoots”_Typescript - Fatal编程技术网

设置“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包。