Skip to content

类型系统

函数的交叉类型等价于函数重载

ts
type F1 = ((e: 0) => void) & ((e: 1) => void);
type F2 = {
    (e: 0): void;
    (e: 1): void;
};
type R = (F1 extends F2 ? true : false) | (F2 extends F1 ? true : false); //true

联合类型作为裸类型参数进行条件判断时,会执行类型分配,形成分布式条件类型

ts
//裸参数
type D1<U> = U extends 0 ? true : false;
type R1 = D1<0 | 1>; //boolean

//非裸参数
type D2<U> = [U] extends [0] ? true : false;
type R2 = D2<0 | 1>; //false

type vs. interface

typeinterface
声明泛型、各种类型声明对象、函数类型
只能合并为交叉类型通过 extends 合并类型
不能重复声明合并声明。对于属性,只允许重复声明函数,以实现重载

阮一峰