打字稿:分隔联合类型的每个成员

时间:2018-07-24 11:59:18

标签: typescript discriminated-union

我有一个生成的联合类型,类似于:

type Result = { type: 'car' } | { type: 'boat' }

我如何分隔它们,以便可以为其中每个创建单独的类型?例如:

type BoatResult = { type: 'boat' }
type CarResult = { type: 'card' }

必须从原始Result类型创建它们的地方。

1 个答案:

答案 0 :(得分:2)

您可以对Extract使用Extract条件类型,以从扩展给定类型的并集中获取类型。如果您的联合实际上像问题中的那么简单,则没有太大意义,但是,如果您有其他字段,则可以使用它从联合中提取完整类型。

type Result = { type: 'car', a: number } | { type: 'boat', b: string }

type Car = Extract<Result, { type: 'car' }> //{ type: 'car', a: number }
type Boat = Extract<Result, { type: 'boat'} > // { type: 'boat', b: string }