2017-08-29 70 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

相關問題