typescript 如何提取扩展查询类型的常量数组中所有对象的联合类型?

z2acfund  于 2023-06-24  发布在  TypeScript
关注(0)|答案(1)|浏览(120)

我有一个常量数组,其中的对象满足一个类型:

const X = [
 {a: 1, b: 2},
 {a: 3, b: 2},
 {a: 5, b: 4}
] as const satisfies {a: any};

有没有一种方法可以得到我传递的所有扩展泛型类型的元素的联合类型。例如:

type b2 = Discriminator<X, {b: 2}>; // {a: 1, b: 2} | {a: 3, b: 2}
type b4 = Discriminator<X, {b: 4}>; // {a: 5, b: 4}
edqdpe6u

edqdpe6u1#

type Discriminator<T extends readonly unknown[], U> = Extract<T[number], U>

这里Discriminator是一个类型,它接受对象数组为T,并接受匹配对象为U
T[number]获取所有可能的数组成员类型作为联合,然后Extract<T[number], U>仅获取该联合中与U匹配的成员
见操场

相关问题