2013-05-29 47 views
1

我們在我們的項目中有大約一百個.ts文件和一打.d.ts文件。在處理引用的TypeScript 0.8.3上,我們有一個名爲_references.d.ts的文件,它以依賴關係的順序列出了所有定義文件,並確保它出現在項目的.csproj文件中的任何其他打字稿項目之前。參考升級到TypeScript 0.9.0.alpha的問題

<ItemGroup> 
    <TypeScriptCompile Include="Scripts\_references.d.ts" /> 
    ... 

通過這種方式,所有引用都可以正確解析,而不必在任何typescript源文件中添加任何引用。但是,升級到TypeScript 0.9.0.alpha後,這似乎不再有效。現在,即使我們在每個源文件中都參考了_references.d.ts,它也不起作用,並且必須通過所有源文件幷包含對每個定義文件的直接引用。這將是一個痛苦,我也不喜歡這種方法,因爲我們無法知道每個.ts文件中的未使用的引用,並且沒有簡單的方法來清除它們。所以我的問題是,這是設計的痛苦,還是有任何其他方式可以讓編譯器對引用感到滿意?

謝謝!

+0

0.9不僅引入了對0.8的改變。您正在生產項目中使用Alpha版本。我會考慮至少等到它不在阿爾法。 –

+0

它在一個單獨的分支上。所以我們希望儘可能兼容最新版本,並報告可能影響我們代碼的問題。 – orad

+2

我更喜歡在生產環境中使用最新版本。它只是生成JavaScript,這是人類可觀察的。如果它產生的二進制文件,我會明確指出:) – basarat

回答

2

我想我發現了什麼問題。在我們的_references.d.ts文件中,有一個在任何引用之前在文件頂部聲明的接口。編譯器沒有提供任何信息錯誤,只是忽略了這些引用。

因此,所有/// <reference path="..." />的需要在文件中的第一位。

2

它更好地從命令行有一個清晰的TypeScript編譯管道,我想這就是發生了什麼。

我喜歡在我的項目中使用reference.ts。這反過來引用我的項目中的所有文件。然後將每個文件在我的項目引用這個主文件爲:

/// <reference path="references.ts" /> 

通知.TS,而不是.d.ts

打字稿將制定出循環依賴(文件引用之間...不是類型),你不需要擔心這一點。

編譯您的項目爲:

tsc --out output.js --declaration 

,你會得到在其他項目中重複使用一個單一的js + output.d.ts文件。

+0

我試過**。ts **而不是**。d.ts **,但我沒有看到任何區別。我沒有看到[規格](https://typescript.codeplex.com/downloads/get/672560)中的任何內容(請參閱第11.1.1節),要麼說源文件和定義文件的依賴性處理方式不同。我看到的唯一區別是**。ts **文件創建了一個源映射文件,但不是**。d.ts **文件。 – orad

+0

如果您的**。d.ts **包含的所有文件都是**。ts **文件的引用,則不會產生影響。但是,如果您將聲明放入**。d.ts **中,它們將不會成爲生成的**。d.ts **的一部分。請參閱:http://stackoverflow.com/a/16687938/390330 – basarat

1

我不完全確定,但該功能可能僅僅是缺少版本的alpha版本。考慮到它是0.9的預覽,因此尚未支持所有功能。還有other已知功能缺少0.9 alpha。可以肯定的是,您可能想要轉到TypeScript項目站點並直接詢問它們。

順便說一句,這是一個很好的小技巧,以確保每個文件引用的定義,雖然我同意BASarat,使用這種設置,你不能從命令行建立它。

在我們的項目中,我們只使用這些參考文件作爲實際定義文件,其他所有模塊都以導入的方式導入。我們提供了幾個包裝定義文件,例如general_libraries.d.tsmyproject.core.d.ts。通過這種方式,我們可以輕鬆地添加或刪除庫的定義文件,而無需在每個引用的地方更新它。

另外請注意,當你有2個模塊,A & B和A引用定義文件C和B導入A時,B知道C而不必再次引用它。