條件類(lèi)型是用 條件表達(dá)式 進(jìn)行類(lèi)型的關(guān)系檢測(cè)
簡(jiǎn)單的值匹配
type Equal<X, Y> = X extends Y ? true : false;
type Num = Equal<1,1>; // true
type Str = Equal<'a','a'>; // true
type Boo = Equal<true, false>; // false
嵌套類(lèi)型匹配
type TypeName<T> =
T extends string ? "string" :
T extends number ? "number" :
T extends boolean ? "boolean" :
T extends undefined ? "undefined" :
T extends Function ? "function" :
"object";
type T0 = TypeName<string>; // "string"
type T1 = TypeName<"a">; // "string"
type T2 = TypeName<true>; // "boolean"
type T3 = TypeName<() => void>; // "function"
type T4 = TypeName<string[]>; // "object"
聯(lián)合類(lèi)型判斷
type A = 'x';
type B = 'x' | 'y';
type Y = A extends B ? true : false; // true
聯(lián)合類(lèi)型無(wú)法做出判斷
得到一個(gè)聯(lián)合類(lèi)型,包含所有返回值
type AB<T> = T extends 'x' ? 'a' : 'b';
type All = AB<'x'|'y'>; // 非確定條件
// 得到 type All = 'a' | 'b';
栗子:一個(gè)過(guò)濾功能的函數(shù)類(lèi)型
type Filter<T, U> = T extends U ? never : T;
type Values = Filter<'x'|'y'|'z', 'x'>; // Values = 'y' | 'z'