【发布时间】:2020-08-31 21:27:32
【问题描述】:
是否可以在对象类型的区分联合中合并所有属性?
例如,假设我有以下类型:
type UnionType = { name: string; } | { age: number; } | { visible: boolean; }
是否可以像这样将它们合并为一个类型:
// Expect: { name: string; age: number; visible: boolean };
type Props = MagicType<UnionType>;
这本质上是来自utility-types 的Unionize 类型的逆。
【问题讨论】:
-
这不是discriminated union(一个联合,其中每个成员可以通过具有不同文字值的公共属性与其他成员区分开来),它只是一个联合。您要求的是(本质上)将联合变成一个交叉点,这是this question 的副本。
-
请注意,如果您确实以这种方式合并了一个可区分联合(例如,
{type: "circle", radius: number} | {type: "square", length: number}),那么您最终会得到一个不可能的判别式类型(例如,{type: never, radius: number, length: number})
标签: typescript