获取两个接口类型中的差值属性
type Foo = {
a: string;
b: number;
}
type Bar = {
a: string;
c: boolean
}
type Result1 = Diff<Foo, Bar> // { b: number, c: boolean }
type Result2 = Diff<Bar, Foo> // { b: number, c: boolean }
// 答案 1
type Diff<O, O1> = Omit<O & O1, keyof (O | O1)>
// 答案 2
type Diff<O, O1> = {
[K in keyof (O & O1) as K extends keyof (O | O1) ? never : K]: (O1 & O)[K]
}