TypeScript 2.8引入条件类型
最新發布的TypeScript 2.8包含了若干主要特性和一些問題修復,其中最為重要的是新增了條件類型,開發人員可以根據其他類型的特征為變量選擇適當的類型。
條件類型最適合與泛型組合在一起使用。如果一個框架總是重復相同的選擇性代碼,就會變得很繁瑣。JavaScript可以在運行時根據具體值做出決策,與之類似,TypeScript的條件類型可以根據其他類型的特征來做出決策。
TypeScript團隊給出了一個示例,使用更靈活的接口代替原先繁瑣的API:
原先:
interface Id { id: number, /* other fields */ } interface Name { name: string, /* other fields */ }declare function createLabel(id: number): Id; declare function createLabel(name: string): Name; declare function createLabel(name: string | number): Id | Name;替換為:
type IdOrName<T extends number | string> =?? T extends number ? Id : Name;declare function createLabel<T extends number | string>(idOrName: T):?? T extends number ? Id : Name;條件類型提供了infer關鍵字來推斷類型,用于替代手動獲取類型。TypeScript為此提供了一個示例,他們創建了一個叫作Flatten的類型,用于將數組轉成他們需要的元素類型:
type Flatten<T> = T extends any[] ? T[number] : T;如果使用關鍵字infer就可以將上面的代碼簡化成:
type Flatten<T> = T extends Array<infer U> ? U : T;條件類型也為聯合類型帶來了改進,現在可以根據條件類型來分配聯合類型。
另外,TypeScript還增加了若干新的類型別名(Exclude、Extract、InstanceType、NonNullable、ReturnType),這些類型別名也是基于條件類型的。TypeScript團隊因此可以更高效地直接往語言里添加額外的類型模式。
TypeScript 2.8還增加了一個新的--emitDeclarationOnly標記,用于分離TypeScript定義文件和JavaScript文件,從而改進了使用Babel 7轉換TypeScript代碼的過程。
該版本還為React和JSX用戶帶來了一些有關編譯注釋和JSX模塊解析的改進。
現在可以使用-operator或新的Required類型來移除標識符。
其他小改進還包括:用于清理ES模塊導入的輔助工具和對未初始化類屬性檢查的改進。
總體來說,TypeScript 2.8帶來了若干改進,大部分都是基于新引入的條件類型,現在可以定義更復雜的類型。
可以通過npm install -g typescript來安裝最新的TypeScript 2.8,或者直接從GitHub上下載。TypeScript 2.9正在開發中,預計5月下旬發布。
原文地址 http://www.infoq.com/cn/news/2018/04/typescript-2-8-conditional-types
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的TypeScript 2.8引入条件类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用C#(.NET Core) 实现简单工
- 下一篇: 用分布式缓存提升ASP.NET Core