TypeScript 3.5 發佈: 增加 Omit 類型和智能聯合類型檢查

TypeScript團隊發佈了TypeScript 3.5,該版本包括了類型檢查性能的改進和一個新的Omit類型。

TypeScript 3.4引入了一個新的標識 --incremental ,該標識保存了上次編譯時的項目圖信息,這樣可以最快地檢測到對項目進行的類型檢查和變更,從而降低後續的編譯時間。TypeScript 3.5改進了這種方法,TypeScript項目經理Daniel Rosenwasser對此做出如下解釋:

TypeScript 3.5包含了幾個用來緩存編譯器設置、查找文件的原因以及找到文件的位置等計算狀態信息的優化。我們發現,–build 模式下,在使用TypeScript項目引用的數百個場景中,與TypeScript 3.4相比,TypeScript 3.5的重新構建時間降低了68%。

爲了加速類型檢查,並解決TypeScript 3.4中引入的一些類型檢查性能迴歸問題,TypeScript團隊重點優化了代碼路徑和功能,使得TypeScript 3.5在進行很多增量檢查時比TypeScript 3.3更快,不僅編譯時間減少,代碼自動補全和其他編輯器操作也變的更快。

一個典型的TypeScript模式是創建一個省略某些特定屬性的新對象。在TypeScript 3.5之前,開發人員通常採用組合Pick和Exclude 輔助工具的形式來定義省略模式。TypeScript 3.5新增了一個Omit類型。TypeScript團隊提供的一個示例,該示例展示了TypeScript 3.5發佈前後如何定義一個不包含location屬性的Person對象的過程。

採用無Omit類型的TypeScript 3.4實現如下:

type Person = {
    name: string;
    age: number;
    location: string;
};

type RemainingKeys = Exclude<keyof Person, "location">;

type QuantumPerson = Pick<Person, RemainingKeys>;

// equivalent to
type QuantumPerson = {
    name: string;
    age: number;
};

採用新增了Omit類型的TypeScript 3.5的實現如下:

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

開發人員可以通過 lib.d.ts 獲取Omit類型和其他內置輔助類型。

TypeScript支持對象文本的多餘屬性檢查,當一個類型包含意外屬性時,它能檢測出錯誤。在TypeScript 3.5之前,允許使用某些多餘的屬性,比如對象文本上的name屬性,這是因爲非區分聯合不會對其成員執行多餘屬性檢查。TypeScript 3.5會驗證所有提供的屬性是否屬於某個聯合成員並具有適當的類型。

TypeScript 3.5改進了聯合類型檢查。檢查聯合類型時,TypeScript通常會單獨比較每個組成類型。TypeScript 3.5之前,在某些情況下,如果類型定義不夠具體,類型檢查就會失敗。例如,如果一個成員的值是true或false,而另一個成員使用具有相同屬性值的boolean類型,那麼檢查就會失敗。在TypeScript 3.5中,語言現在將類型分解爲所有可能類型的聯合。因爲boolean是true與false的聯合,所以現在這個例子就可以成功地進行類型檢查了。

TypeScript 3.4引入了對泛型函數的類型推導。TypeScript 3.5將其推廣到構造函數上。這種對泛型構造函數的新推導允許在某些UI庫(如 React )中對類組件進行操作的函數可以更正確地對泛型類組件進行操作。

TypeScript 3.5中的其他新特性還包括新增了 --allowUmdGlobalAccess 標誌,它爲編輯器提供了一個智能選擇API,以基於語法感知的方式擴展文本選擇,並重構將類型抽取出本地類型別名。

TypeScript 3.4 引入了潛在的破壞性變更,下面這些是使用TypeScript 3.5新特性的修正結果:

  • 泛型類型參數被隱式約束爲未知
  • { [k: string]: unknown } 不再是通配符賦值目標
  • 修復了對索引訪問類型的不完全寫入
  • Object.keys拒絕 ES5原語
  • lib.d.ts中引入Omit輔助類型

TypeScript團隊已經在開發TypeScript 3.6的特性,3.6版本中包括對生成器和迭代器的改進,對ECMAScript私有類字段的支持,更多的是對編譯器、基礎設施和編輯器的改進。

TypeScript社區也在爲10月11日舉行的第二次TSConf活動做準備,屆時TypeScript的創始人Anders Hejlsberg將發表主題演講。

TypeScript是Apache 2許可證下可用的開源軟件。鼓勵大家遵循TypeScript貢獻指南微軟開源行爲準則TypeScript GitHub項目上進行貢獻和反饋。

原文鏈接
TypeScript 3.5 Adds Omit Type, Smarter Union Type Checking

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章