網站搜尋

如何從 TypeScript 的標記聯合類型中提取類型?


假設已經有一種類型被定義為這樣:

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

是否有可能從類型 Item 中提取 link 部分?我的意思是,是否有可能定義一個類型 ExtractTypeFrom:

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

而 LinkItem 將會是:

{
  type: 'link',
  url: string
}

答案#1

是的,這是可能的,你非常接近,你可以使用預定義的 Extract 條件類型。你需要作為第二個參數傳入一個可以作為你尋找的類型的基類型的類型:

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