2014-02-26 51 views
0

除了明顯的(哈)。將TypeScript編譯爲獨立模塊或單個文件有什麼區別?

我還不確定爲什麼你會選擇其中之一。

我曾經認爲編譯單個文件比較容易,因爲您使用<reference>來鏈接文件,並且可以使用嵌套模塊來管理全局名稱空間。

但現在我在想,import/require和許多輸出文件可能是更好的模塊化(和常規JavaScript/ES6相似)。

但是,你可以充分使用導入命名空間類型?導入時使用額外級別的模塊看起來很尷尬。

而我們是否仍然需要<references>來解析類型註釋?

我該如何決定?

+1

你讀過了嗎?它涵蓋了你的大部分問題https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript –

+0

只是以爲我會分享這個;)http://www.youtube.com/watch?v = KDrWLMUY0R0&hd = 1 – basarat

+0

感謝您的手冊鏈接,我甚至不知道它存在!現在挖掘它。 – Bartvds

回答

1

我以前認爲編譯單個文件比較容易,因爲您使用<reference>來鏈接文件,並且可以使用嵌套模塊來管理全局名稱空間。

基本上都採用--out:

臨:簡單的開始說起。類型可通過簡單的<reference評論進口。

Con:單個文件。調試JS時不容易調試。

但是,你可以充分使用導入命名空間類型?

當您使用外部模塊時,不應使用內部模塊。對於外部模塊(amd/commonjs),每個文件都是它自己的模塊。這將避免「間接/不必要」的間接水平。

而我們是否仍然需要解析類型註釋?

不,只要你export東西在根級///<reference該文件不再做任何事情。導入從這樣的文件類型(甚至接口)的唯一方法是使用import/require

注:

爲了克服通過///<reference得到--out即簡易型進口的利弊+還是讓JS的簡單調試, grunt-ts支持爲你生成一個amd-loader:https://github.com/grunt-ts/grunt-ts#advantage-of-using-amdloader-option

+0

對於'import/require'我擔心會創建無法解析的依賴循環,但值得一試。 amdLoader聽起來不錯(我在實際的細節上仍然很朦朧),但它是否也適用於commonjs(節點)? – Bartvds

+0

'它也可以用於commonjs(節點)'它需要不同的實現。並且棘手,因爲最好使用'import/require'。 – basarat

+0

'我擔心創建無法解析的依賴循環:如果需要b和b需要a,a是第一個執行,a得到b爲空值並且需要處理它 – basarat

相關問題