我遇到了一种情况,我想在node_modules目录中包含一些但不是所有的@types。在tsconfig中明确包含类型的最佳方法是什么?
背景
我tsconfig.json
看起来是这样的:
{
"compilerOptions": {
"module": "system",
"target": "es5",
"sourceMap": true,
"allowSyntheticDefaultImports": true,
"lib": [
"es2016",
"dom"
]
},
"exclude": [
"node_modules"
]
}
我@types通过NPM安装和布置在node_modules目录。
编译器能够因为typeRoots设置为node_modules/@类型由default.¹或者至少这是我认为正在发生的事情找@types。
的问题
我们使用AngularJS,我们已经使用(愣神,也许)通过角嘲笑提供的module
变量来引导我们的规范文件。
但是,@ types/node也有module
,它有不同的类型。
现在,每当我编译我的测试,我在每一个规范文件得到一个错误:Type 'NodeModule' has no compatible call signatures.
我想避免module
每spec文件更改为angular.mock.module
。我需要找到一种排除@ types/node的方法。
问题
什么是明确包括在tsconfig类型的最佳方式?
可能的解决方案
选项A:列表中选择所需类型下的typesRoots
财产,并注明 “node_modules” 为exclude
。 (这将甚至工作吗?)
选项B:根本不使用typeRoots。使用include
和exclude
来配置我想要的@types。 (这工作)
选项C:创建用于测试的专用tsconfig,并在专用tsconfig使用选项A或选项B(与延伸,也许)
¹的typescript docs说:
默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的
node_modules/@types
中的包都被视为可见;具体而言,这意味着在./node_modules/@types/
,../node_modules/@types/
,../../node_modules/@types/
等内的包。
啊是的,隐藏的选项D :) – user2954463