【转】TypeScript的extends条件类型

条件类型是用 条件表达式 进行类型的关系检测

简单的值匹配

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

嵌套类型匹配

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"

联合类型判断

type A = 'x';
type B = 'x' | 'y';
type Y = A extends B ? true : false; // true

联合类型无法做出判断
得到一个联合类型,包含所有返回值

type AB<T> = T extends 'x' ? 'a' : 'b';
type All = AB<'x'|'y'>;  // 非确定条件
// 得到 type All = 'a' | 'b';

栗子:一个过滤功能的函数类型

type Filter<T, U> = T extends U ? never : T;
type Values = Filter<'x'|'y'|'z', 'x'>;  // Values = 'y' | 'z'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容