我遇到了一種情況,我想在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