是否可以在接口上制作 "inner join"

Is it possible to make an "inner join" on interfaces

假设我们有两个接口 FirstSecond:

interface First {
  a: string;
  b: number;
}

interface Second {
  b: number;
  c: Date;
}

通过交叉点可以合并两个接口:

type FirstSecond = First & Second // {a: string, b: number, c: Date}

但是是否可以进行 内部连接 ​​,因此生成的接口 包含在 [=25] 中声明的属性=]两个接口:

type FirstSecond = First /*inner join here*/ Second // {b: number}

这对泛型类型尤其有用。

您可以使用Pick从交叉点获取公共属性。要获得公共属性,可以使用 Extract 条件类型通过另一种类型的键过滤一种类型的键:


interface First {
  a: string;
  b: number;
}

interface Second {
  b: number;
  c: Date;
}


type IntersectByProperties<T, U> = Pick<T & U, Extract<keyof T, keyof U>>

type R = IntersectByProperties<First, Second>