是否可以在接口上制作 "inner join"
Is it possible to make an "inner join" on interfaces
假设我们有两个接口 First
和 Second
:
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>
假设我们有两个接口 First
和 Second
:
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>