是否可以在接口上进行“内部联接”

时间:2019-07-30 08:59:29

标签: typescript typescript-generics

假设我们有两个接口FirstSecond

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

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

使用交集可以合并两个接口:

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

但是可以进行内部联接,因此生成的接口由在两个接口中声明的属性组成:< / p>

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

这对于泛型类型尤其有用。

1 个答案:

答案 0 :(得分:5)

您可以使用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>