日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript 2.8引入条件类型

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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引入条件类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。