2017-07-01 29 views
0

我剛剛在打字稿中編寫了我的第一個節點包。它有6個模塊,每個模塊有幾百行代碼。爲了讓測試通過,我已經把聲明放在每個模塊的頂部;它們被包含在其他模塊中(以及其他所有內容)。瞭解打字稿模塊和聲明文件之間的關係

現在我需要通過其他打字稿模塊使其消耗 - 所以我需要創建一個「index.d.ts」文件。

我想知道是否最好的方式來構建它是讓該文件包含其他?因此,例如,如果我有模塊foo.tsbar.ts,我應該創建foo.d.tsbar.d.ts,然後將它們包含在index.d.ts? (我是否應該將它們想象成c中的「.h」文件?)

另外,如何將定義返回到模塊? foo.ts應該從foo.d.ts導入嗎?當bar.tsfoo進口時,是否獲得合併版本bar.tsbar.d.ts?即使它們全部從index.d.ts導入,這與從index.ts導入的區別如何?

解釋如何導入與模塊和同名的聲明交互將是非常有用的。

+2

你在這裏問七度這樣的問題。作爲一個能夠幫助你的人,我認爲你有必要區分(a)你真正想要回答的單個問題(b)你正在做的事情是以問題的形式出現的。這將使我更容易提供與(a)相關的答案。 –

回答

0

As @ShaunLuttin指出我在這裏問了很多問題。我的問題標題中的關鍵詞是「理解」 - 我誤解了「d.ts」和「ts」文件的關係,但我想我已經澄清了它。

關鍵步驟是將"declarations": true添加到我的tsconfig.json文件中。這會導致所有模塊的聲明文件自動生成並與文件一起放入dist/。我的外賣,把它化學計量:

foo.ts <=> foo.d.ts + foo.js + foo.js.map 

換句話說,我只是通過移動界面到我的源代碼目錄「.d.ts」文件的思維混亂的自己。包裝內的打字稿源是自給自足的;是否將接口分解爲源中的其他打字稿(不是聲明文件)是一個正交問題。

聲明文件是指類型組件,用於補充跨包邊界傳遞的JavaScript代碼。 (在理論上,甚至應該能夠從「d.ts」+「.js」文件後退到「.ts」文件; @ S.Klechkovski指出,源地圖文件包含相關信息[謝謝!]。 ..我仍然認爲沒有一種工具可以將三者結合在一起。)打字稿仍然是「單一權威點」,以滿足「不要重複自己」的要求。

[注:我會離開我的答案不被接受了幾天的情況下,有人可以給一個清楚的解釋。]

+1

* .d.ts文件僅包含相應* .ts文件的類型聲明。聲明文件僅供TypeScript編譯器用於類型檢查。編譯器也可以生成源地圖(「soureMap」:true)。源映射可用於將編譯後的代碼映射回TypeScript。 foo.js + foo.js.map <=> foo。TS –