typescript-剔除两个类型的公共属性

type Foo = {
  a: string;
  b: number;
};
type Bar = {
  a: string;
  c: boolean;
};

 type Diff<T,Y> = {
  [K in (keyof T | keyof Y) as  K extends (keyof T & keyof Y) ?never:K]:K extends keyof T ? T[K]:K extends keyof Y ? Y[K]:never
 }

type Result1 = Diff<Foo, Bar>; // { b: number, c: boolean }
type Result2 = Diff<Bar, Foo>; // { b: number, c: boolean }

猜你喜欢

转载自blog.csdn.net/weixin_56356934/article/details/140654964