javascript - 如何為新的函式庫撰寫 TypeScript 定義檔?
如果你要編寫自己的開源 TypeScript 函式庫,你會如何結構 TypeScript 和 TypeScript 定義檔?據我了解,定義檔主要是為了編譯器,這樣當你的函式庫被使用時,能提供 Intellisense 以幫助使用者。
但是,在開發函式庫時,定義文件在內部是如何運作的呢?你會把所有的型別(介面、類別等)放在一個 {module}.d.ts 文件中,並在內部引用這個定義文件,這樣就不需要把型別寫兩次(一次在 {module}.ts 中,一次在 {module}.d.ts 中)嗎?
在 TypeScript 編譯器選項中,將 "declaration" 設為 true 的目的是什么?對我來說,如果它不會非常有用(例如,註解),自動生成定義文件似乎沒什麼幫助。
如果你的程式庫有多個模組,你會為每個模組寫一個單獨的定義,然後在定義之間添加引用,然後用某個自動化工具(例如 gulp、grunt)將它們串接起來嗎?
建議的方式是如何公開你的函式庫,以便 TypeScript 使用者和 JavaScript 使用者都能使用你的函式庫?
你會如何在 TypeScript 中編寫測試?你會在測試文件中導入 TypeScript 模組嗎?
答案#1
在使用 TypeScript 開發你的程式庫時,你不需要使用自己類別的定義。它們是「自包含的」,已經向轉譯器/IDE 提供了所有型別資訊。這些定義如你所提到的,是供外部使用者使用的。
將 declaration 設置為 true 的目的是為了擺脫從 TypeScript 類中收集類型信息並將其粘貼到定義文件中的繁瑣工作。正如我所說,這些信息已經存在於 TypeScript 文件中,可以由轉譯器自動提取。
關於如何組織你的定義並將它們暴露出來——我相信有多種不同的方法,有一點是肯定的——你不會想手動在兩個地方編寫相同的類定義。話雖如此,我可以給你一個範例,展示我如何暴露庫項目並在另一個項目中使用它。請注意那裡的 index.ts 文件,以及根項目如何在 package.json -> typings 欄位中暴露。你還會在那裡找到使用 Jasmine 進行的庫單元測試範例。
希望這能給你一些關於如何進行你的函式庫開發的資訊。