联合类型用 | 表示,值可以是几种类型之一;交叉类型用 & 表示,同时满足多个类型。联合常见于灵活入参:function fmt(v: string | number),处理时需要类型守卫收窄。交叉常见于组合能力:type A = { name: string } & { age: number } 得到的对象两个属性都要有。
两者常结对使用:联合负责表达多分支,交叉负责拼接碎片类型。接口组合时同名属性会按交叉规则合并,若类型不兼容会出现 never。实际开发中交叉类型大量出现在工具类型内部,比如 Partial 与 Pick 的组合约束,把多个约束条件拼成一个参数类型。
type Admin = { name: string; role: string };
type Timestamps = { createdAt: Date };
type User = Admin & Timestamps; // 交叉:属性全都要
function print(v: string | number) { // 联合:多种之一
if (typeof v === 'string') console.log(v.toUpperCase());
else console.log(v.toFixed(2));
}
const u: User = { name: 'tom', role: 'admin', createdAt: new Date() };