类型系统
函数的交叉类型等价于函数重载
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
type | interface |
---|---|
声明泛型、各种类型 | 声明对象、函数类型 |
只能合并为交叉类型 | 通过 extends 合并类型 |
不能重复声明 | 合并声明。对于属性,只允许重复声明函数,以实现重载 |