两种类型的交集
type A = { name : string , age : number }
type B = { name : string , age : string , role : string }
求出A,B类型的交集,只有属性名和属性类型完全一致时,被称为交集( 也就是求出 type C = { name : string } )
代码
type A = { name : string , age : number }
type B = { name : string , age : string , role : string }
/**
取类型 T 与类型 K 的交集,属性名和类型需完全一致
*/
type Instersection<T,K> = Filter<{[M in Extract<keyof T,keyof K>]:Extract<T[M],K[M]>},never>
/**
从类型 T 中过滤掉属性类型为 K 的属性
*/
type Filter<T extends object,K>=Pick<T, { [M in keyof T]: T[M] extends K ? never : M}[keyof T]>