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