TS类型中的交叉并集类型,需要手动实现
在ts中有&和|操作符,对于初学者来说,&和|在类型联合中并不符合交集并集的数学思维预期。通常数学思维我们期待,交集是指两个类型的共有属性,并集是两个类型的所有属性并去重。
实际上,ts中的&表现如下
type A={
name:string;
id:string;
tel:string;
}
type B={
name:string;
id:number;
email:string;
}
type C=A&B
// C将会是
{
name:string;
id:never; // 这里因为AB的id类型不一致
tel:string;
email:string;
}
ts中的|表现如下
type C=A|B
// C将会是
{
name:string;
id:number;
email:string;
}|{
name:string;
id:string;
tel:string;
}
所以需要手动取合集,这里利用泛型做了一层通用封装。
type CommonProperties<T, U> = {
[K in keyof T & keyof U]: T[K] | U[K];
// 这里的&表示需要在多个类型中共有
// 这里的|表示如果类型同名,但值类型不一致,则取|进行通用性保留,也可以改成&,不一致时则为never
};
突然觉得这种问gpt就可以的确实没必要写成掘金。。。不过写了就随手更新一下