2015-09-08 161 views
6

我正在使用SystemJS/jspmTypeScript definition manager在TypeScript中構建Aurelia應用程序。我有.ts源文件在/app/**.d.ts文件下/typings/**/jspm_packages/**(因爲一些定義文件通過jspm發運)。引用TypeScript類型定義

顯然,TypeScript編譯器不理解SystemJS/jspm或TSD,所以我需要以某種方式引用由它們管理的類型定義。我試過將所有.ts文件傳遞給編譯器,以便它引用源代碼和定義,但這會導致必須下載所有類型定義導入的所有類型定義的漏洞。它最終是類型定義inception(Yo dawg我聽說你喜歡類型定義)。似乎編譯器應該只關心導出的由源直接引用的類型定義(和而不是東西通過這些定義導入)。

無論如何,我感覺我會以錯誤的方式討論這個問題,並且想知道是否有更好的/正確的方式來引用定義文件。

PS:看起來可能有一些解決方案涉及編輯器/插件,但我正在尋找嚴格的CLI方法,因爲這是自動構建的一部分。

+0

你有沒有試過將你的類型文件夾移動到應用程序文件夾內?這樣,那裏的tsconfig.json文件將自動爲你(而不是從jspm中的其他包)拾取你的聲明 – Brocco

+0

它拾取聲明就好,但問題是它跟隨所有類型的引用(導入)定義。所以舉個例子,假設我引用lib A引用lib B.我只需要包含lib A的類型定義。但是現在我需要包含lib A和B的類型定義。 – hcoverlambda

+0

tsd應該爲你處理...即,如果我通過tsd安裝angular的定義,它會自動爲我帶來jquery。 – Brocco

回答

1

我討厭引用文件。我所做的只是使用tsconfig.json中的「不包含」選項。這保證所有類型的文件將被包含在我的整個項目中,我永遠不會使用任何<reference>

只需使用the following tsconfig,你應該是好去:

{ 
    "compilerOptions": { 
    "target": "es5", // or es6 
    "module": "system", 
    "sourceMap": true, 
    "declaration": true 
    }, 
    "exclude": [ 
    "node_modules" 
    ] 
} 

Here's我的主文件模塊中。請注意,沒有任何聲明文件的引用。