為什麼以及何時使用 TypeScript

數字與非型別語言的優點已經爭論了幾十年。靜態型別的引數包括:

  1. 安全性:型別系統允許儘早捕獲許多錯誤,而無需執行程式碼。可以將 TypeScript 配置為允許更少的程式設計錯誤
  2. 可讀性:顯式型別使程式碼更易於人類理解。正如弗雷德布魯克斯寫道 :“告訴我你的流程圖並隱藏你的桌子,我將繼續神祕化。告訴我你的桌子,我通常不需要你的流程圖;它們將是顯而易見的。”
  3. 工具:型別系統使計算機更容易理解程式碼。這允許 IDE 和 linters 等工具更強大。
  4. 效能:型別系統通過減少執行時型別檢查的需要使程式碼執行得更快。

由於 TypeScript 的輸出與其型別無關 ,因此 TypeScript 對效能沒有影響。使用 TypeScript 的論據取決於其他三個優點。

針對型別系統的爭論包括:

  1. 增加了複雜性:型別系統可能比它們描述的語言執行時更復雜。高階函式可以很容易地正確實現,但很難輸入 。處理型別定義會給使用外部庫帶來額外的障礙。
  2. 新增了詳細程度:型別註釋可以為你的程式碼新增樣板,使底層邏輯更難以遵循。
  3. 較慢的迭代:通過引入構建步驟,TypeScript 會減慢編輯/儲存/重新載入週期。
  4. 不完整性:型別系統既不健全又完整。TypeScript 不允許使用正確的程式。TypeScript 接受的程式仍然可能包含錯誤。型別系統不能減輕測試需求。如果使用 TypeScript,則可能需要等待更長時間才能使用新的 ECMAScript 語言功能。

TypeScript 提供了一些解決所有這些問題的方法:

  1. 增加複雜性。如果鍵入程式的一部分太困難,可以使用不透明的 any 型別在很大程度上禁用 TypeScript。外部模組也是如此。
  2. 增加了詳細程度。這可以部分通過型別別名和 TypeScript 推斷型別的能力來解決。編寫清晰的程式碼既是一門藝術也是一門科學:刪除太多型別的註釋,程式碼可能不再為人類讀者所清楚。
  3. 較慢的迭代:構建步驟在現代 JS 開發中相對常見,TypeScript 已經與大多數構建工具整合 。如果 TypeScript 提前發現錯誤,它可以為你節省整個迭代週期!
  4. 不完全性。雖然這個問題無法完全解決,但隨著時間的推移,TypeScript 已經能夠捕獲越來越多的表達性 JavaScript 模式。最近的例子包括在 TypeScript 2.1 中新增對映型別在 2.2 中新增 mixins

支援和反對型別系統的引數通常同樣適用於 TypeScript。使用 TypeScript 會增加啟動新專案的開銷。但隨著時間的推移,隨著專案規模的擴大和更多的貢獻者的增加,人們希望使用它(安全性,可讀性,工具性)的優點變得更強大,超過缺點。這體現在 TypeScript 的座右銘:“可擴充套件的 JavaScript”。