如何从打字稿中带标签的联合类型中提取类型?

时间:2018-10-23 07:09:00

标签: typescript types union-types

说已经定义了一个类型:

export type Item = {
  type: 'text',
  content: string
} | {
  type: 'link',
  url: string
}

是否可以从类型link中提取Item部分?我的意思是,是否可以定义类型ExtractTypeFrom

type LinkItem = ExtractType<Item, 'type', 'link'>

LinkItem将是:

{
  type: 'link',
  url: string
}

1 个答案:

答案 0 :(得分:2)

是的,您可能非常接近,可以使用预定义的Extract条件类型。您可能需要传入一个类型作为第二个参数,该类型可以是您要寻找的类型的基本类型:

type LinkItem = Extract<Item, { type: 'link' }> // will be  { type: "link"; url: string; }