Categories
程式開發

如何編寫健壯的TypeScript 庫?


當你用TypeScript 編寫庫時,你通常不知道這個庫最終將如何被使用。即使你警告潛在用戶,你編寫這個庫只是針對TypeScript 用戶,你還是可能會在某個時刻擁有JavaScript 用戶——或者是因為他們不顧你的警告而使用這個庫,或者是他們因為傳遞性依賴而使用這個庫。這有一個非常重要的後果:你必須將這個庫設計成任何語言的開發者都可以使用!

其主要部分是函數定義和函數體。如果你針對一個純TypeScript 讀者編寫,那麼你只需定義函數類型並信任編譯器處理其它事情。如果你針對一個純JavaScrpit 讀者編寫,那麼你需要記錄那些類型,但在函數中將實際的類型設為unknown並檢查調用方傳遞的內容。

例如,給定如下代碼

interface Person {

一個JS 用戶可能用任何東西來調用describe函數。

正確寫法:

describe({ name: "chris" })

災難性的錯誤寫法:

describe("potato");

最常見的JS 錯誤:

describe(undefined);

你的庫的JS 用戶並不是故意這麼做的。恰恰相反,在任何足夠大的系統中,很容易將錯誤的參數傳遞給系統中的某個函數。這通常是一個很難避免的錯誤,比如在一個點上做了修改,許多其它地方需要更新,但漏掉了一個點。故意的JS 開發者會把壞數據發送到你設計精美的TS API 中。

如果你針對一個純TypeScript 讀者編寫,那麼你只需定義函數類型並信任編譯器處理其它事情