typescript - 是否可以在接口(interface)上制作 "inner join"

标签 typescript typescript-generics

假设我们有两个接口(interface) FirstSecond:

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

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

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

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

但是否有可能进行内部连接,因此生成的接口(interface)包含在两个接口(interface)中声明的属性:

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

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

最佳答案

您可以使用Pick 从交叉点获取公共(public)属性。要获得公共(public)属性,您可以使用 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>

关于typescript - 是否可以在接口(interface)上制作 "inner join",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267935/

相关文章:

typescript - 在有界泛型类型上使用 Partial<T> 时出现问题

javascript - 添加新参数后发生错误

javascript - Angular 2 : Typescript : Filter grid data based on provided filter condition

typescript - 有什么方法可以将类型设置为函数参数中的数组元素之一?

typescript - Typescript 中带/不带泛型的条件类型似乎不一致

typescript - 在泛型中使用泛型类类型

typescript - 根据 typescript 中的构造函数参数重载类属性

javascript - 获取扩展对象的 TypeScript 代码补全

node.js - Npm 安装错误,对 http ://registry. npmjs.org/concurrently 的请求出现愚蠢的 fetchpackagemetadata 错误,原因:套接字挂起

javascript - 将字符串更改为数组