代码之家  ›  专栏  ›  技术社区  ›  Freewind thk

如何从typescript中标记的联合类型中提取类型?

  •  1
  • Freewind thk  · 技术社区  · 6 年前

    假设已经有这样一个类型定义:

    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 回复  |  直到 6 年前
        1
  •  21
  •   Titian Cernicova-Dragomir    6 年前

    是的,有可能你离得很近,你可以使用预定义的 Extract 条件类型。您可能需要作为第二个参数传入一个类型,该类型可以是您正在查找的类型的基类型:

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