Skip to content

Latest commit

 

History

History
48 lines (36 loc) · 1.26 KB

Diff.md

File metadata and controls

48 lines (36 loc) · 1.26 KB
标题 标签
Diff(获取两个接口的差值属性) extends,key(继承,属性)

获取两个接口的差值属性。

  • 泛型约束 T 和 U 的类型为任意对象 Record<string | number | symbol, any>
  • 属性 K 在 T 和 U 的合并类型之间,并断言如果是它们的联合类型(即存在一样的属性),则返回 never,否则返回 K。
  • 值取合并即可。

代码如下:

type Diff<
  T extends Record<string | number | symbol, any>,
  U extends Record<string | number | symbol, any>
> = {
  [K in keyof (T & U) as K extends keyof (T | U) ? never : K]: (T & U)[K];
};

也可以使用 Omit 类型实现,如下所示:

type Diff<O, O1> = Omit<O & O1, keyof (O | O1)>;

使用方式:

type DiffFoo = {
  a: string;
  b: number;
};
type DiffBar = {
  a: string;
  c: boolean;
};

type DiffResult1 = Diff<DiffFoo, DiffBar>; // { b: number, c: boolean }
type DiffResult2 = Diff<DiffBar, DiffFoo>; // { b: number, c: boolean }

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。