首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录:将对象的联合转换为普通的联合

类型记录:将对象的联合转换为普通的联合
EN

Stack Overflow用户
提问于 2020-12-22 15:38:28
回答 1查看 81关注 0票数 0

如何将对象的联合转换为具有对象值的普通联合。举个例子:

代码语言:javascript
复制
type Foo = {};
type Bar = {};
type Baz = {};
type Qux = {};

type Input = {
  foo: Foo,
  bar: Bar,
} | {
  bar: Bar,
  baz: Baz,
} | {
  qux: Qux,
};

type Expected = Foo | Bar | Baz | Qux;

注意联合对象的键可能相交(例如bar)。希望这个解决方案能让我更好地展开嵌套类型。

TS游乐场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 15:46:50

您希望将类似于类型 (这只是T[keyof T])的内容分发给T的工会成员,以便如果T是,例如,A | B | C,那么Transform<T>就是A[keyof A] | B[keyof B] | C[keyof C]。您可以使用分布条件类型来获取该行为:

代码语言:javascript
复制
type Transform<T> = T extends any ? T[keyof T] : never;

让我们来测试一下:

代码语言:javascript
复制
type Output = Transform<Input>
// type Output = Foo | Bar | Baz | Qux

看起来不错。

操场链接到代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65411556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档