Przejdź do treści
Uzyskaj typowane pary z obiektu

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Wzorce

    Jak zachować zależność między każdym kluczem i jego wartością podczas iteracji po `Object.entries`?

    Zbuduj unię krotek klucz/wartość przez typ mapowany i zamknij nieuniknioną asercję w jednym pomocniku.

    Przepis

    type Entry<T extends object> = {
      [K in keyof T]-?: readonly [K, T[K]]
    }[keyof T]
    
    function typedEntries<T extends object>(value: T): Entry<T>[] {
      return Object.keys(value).map(key =>
        [key, value[key as keyof T]] as unknown as Entry<T>
      )
    }
    
    const settings = { dark: true, retries: 3 }
    const entries = typedEntries(settings)

    Build to kompiluje i sprawdza każdy wynik poniżej.

    Jak to działa

    1. 01
      readonly [K, T[K]]

      Każda mapowana właściwość staje się krotką, której wartość jest związana z dokładnie tym kluczem.

    2. 02
      }[keyof T]

      Indeksowanie zwija tabelę do dyskryminowanej unii par.

    Co dostajesz

    Gdzie to zawodzi

    Tak jak przy typowanych kluczach, asercja zakłada brak dodatkowych właściwości poza `keyof T`. Używaj jej dla obiektów należących do twojego kodu, nie dla niesprawdzonych wartości z API lub JSON.

    Wniosek

    Mapowany obiekt zindeksowany przez `keyof` to precyzyjny sposób budowania skorelowanej unii krotek.

    Zobacz też

    Wzorce