當前位置:
首頁 > 最新 > TypeScript 2.8引入條件類型

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 ? Id : Name;declare function createLabel(idOrName: T): T extends number ? Id : Name;

條件類型提供了infer關鍵字來推斷類型,用於替代手動獲取類型。TypeScript為此提供了一個示例,他們創建了一個叫作Flatten的類型,用於將數組轉成他們需要的元素類型:

type Flatten = T extends any[] ? T[number] : T;

如果使用關鍵字infer就可以將上面的代碼簡化成:

type Flatten = T extends Array ? 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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dotNET跨平台 的精彩文章:

開源服務容錯處理庫Polly使用文檔
EntityFramework Core 2.0執行原始查詢如何防止SQL注入?

TAG:dotNET跨平台 |