網站搜尋

typescript - 從介面屬性建立聯合型別


考慮以下介面

type State = {
  data: any[]
  index: number
  size: number
  count: number
  loading: boolean
  error: string | undefined
}

我需要創建一種類型,它是其屬性的聯集,應該像

{data: any[]} | {index: number} | {size: number} |...

到目前為止,我能夠透過使用索引型別存取來合併所有的返回類型,但我會得到介面屬性返回類型的聯合型別。

答案#1

你需要使用分配條件型別:

type State = {
    data: any[]
    index: number
    size: number
    count: number
    loading: boolean
    error: string | undefined
}

type Split<T> = keyof T extends infer Keys // turn on distributivity
    ? (Keys extends PropertyKey
        ? (Keys extends keyof T
            ? Record<Keys, T[Keys]> // apply to each key, or { [prop in Keys]: T[Keys] }for readability
            : never)
        : never)
    : never

//  Record<"data", any[]> | Record<"index", number> | Record<"size", number> ...
type Result = Split<State>

遊樂場