Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 256 · 8 września 2026 · Średnia

    Odwróć

    Zaimplementuj Invert<T>, aby wartości T stały się kluczami, a klucze wartościami.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    invert-object.ts
    Podejście 1 z 3Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

    3
    • Invert<{ a: 'x'; b: 'y' }>—
      → { x: 'a'; y: 'b' }
    • Invert<{ a: 'x' }>—
      → { x: 'a' }
    • Invert<{}>—
      → {}

    Jak oceniamy test Dokładna równość typów, nie przypisywalność — przecięcie to nie to samo co spłaszczony obiekt.

    Jak poszło innym

    Tę zagadkę rozwiązało jak dotąd mniej niż 5 osób. Rozkład pojawi się, gdy próbka będzie na tyle duża, by coś znaczyć.

    Gra na krótkim dystansie

    Najmniej znaków

    Nie ma jeszcze publicznych wyników.

    Archiwum
    02

    Rozwiązanie z komentarzem

    Opublikowano 9 września 2026

    Rozwiązanie

    type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: K }

    Najczęstsza błędna odpowiedź

    type Invert<T extends Record<string, string>> = { [K in keyof T as T[K]]: T[K] }

    Połowa zamiany. Klucz dostaje nazwę starej wartości, co jest słuszne, a potem wartością również staje się stara wartość — powstaje { x: "x" }, podczas gdy sprawdzenie chce { x: "a" }. Zmiana nazwy klucza nie przenosi starego klucza nigdzie; jeśli go chcesz, musisz sam wstawić go w klauzuli wartości.

    Linia po linii

    1. as T[K]

      Nowym kluczem jest stara wartość. as przyjmuje dowolne wyrażenie dające typ klucza, a dostęp indeksowany takim jest.

    2. : K

      A nową wartością jest stary klucz, wciąż w zasięgu, wciąż literał. Obie klauzule są niezależne — i to właśnie pozwala na czystą zamianę w jednej linii.

    Do zapamiętania

    Typ mapowany podejmuje na każdy klucz dwie osobne decyzje: jak się nazywa i co przechowuje. Większość błędów w typach mapowanych to jedna z tych odpowiedzi przypadkiem użyta w miejscu drugiej.

    Wykorzystuje