TS中的條件類型

本篇介紹TS另一種高級類型-條件類型。
官方文檔:https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types1、條件類型是一種由條件表達式所決定的類型
2、條件類型使類型具有了不唯一性,同樣增加了語言的靈活性
例如:
T extends U ? X : Y若類型T可被賦值給類型U,那么結果類型就是X類型,否則就是Y類型。
條件類型約束
泛型約束的例子:
type MessageOf<T extends { message: unknown }> = T["message"];在此示例中,我們使用 message: unknown 約束泛型T。
如果我們想 MessageOf 支持任何類型,我們可以通過將約束和條件類型一起使用:
type MessageOf<T> = T extends { message: unknown } ? T["message"] : never;如果條件成立,在 true 分支內,TypeScript 知道 T 將具有一個 message 屬性。否則將會返回 never 類型。
分布條件類型
當條件類型給定聯(lián)合類型時,它們將變?yōu)榉植际健?/p>type ToArray<Type> = Type extends any ? Type[] : never;
如果我們將聯(lián)合類型傳入ToArray,則條件類型將應用于該聯(lián)合的每個成員。
type ToArray<Type> = Type extends any ? Type[] : never;type StrArrOrNumArr = ToArray<string | number>;
StrArrOrNumArr 類型是 string[] | number[]
避免這種分配性的行為。可以用方括號將 extends 關鍵字的每一側括起來。
type ToArrayNonDist<Type> = [Type] extends [any] ? Type[] : never;type StrOrNumArr = ToArrayNonDist<string | number>;
StrArrOrNumArr 類型是 (string | number)[]
評論
圖片
表情
