2017-08-29 49 views
0

我遇到了一种情况,我想在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目录。

enter image description here

编译器能够因为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。使用includeexclude来配置我想要的@types。 (这工作)

选项C:创建用于测试的专用tsconfig,并在专用tsconfig使用选项A或选项B(与延伸,也许)


¹的typescript docs说:

默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的node_modules/@types中的包都被视为可见;具体而言,这意味着在./node_modules/@types/,../node_modules/@types/,../../node_modules/@types/等内的包。

回答

1

最好的解决办法是使用types tsconfig属性:

"types": ["angular", "angular-mocks", ... etc 

这将自动枚举所有你必须node_modules/@types下的文件夹停止TSC。如果需要,您可以使用配置文件继承,以便您可以共享所有其他编译器设置而不重复。

+0

啊是的,隐藏的选项D :) – user2954463

相关问题