Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 257 · 9 września 2026 · Średnia

    Krotka na obiekt

    Zaimplementuj TupleToObject<T>, aby krotka literalnych kluczy stawała się obiektem odwzorowującym każdy z nich na samego siebie.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    tuple-to-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
    • TupleToObject<['a', 'b']>—
      → { a: 'a'; b: 'b' }
    • TupleToObject<['x']>—
      → { x: 'x' }
    • TupleToObject<[]>—
      → {}

    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 10 września 2026

    Rozwiązanie

    type TupleToObject<T extends readonly PropertyKey[]> = { [K in T[number]]: K }

    Najczęstsza błędna odpowiedź

    type TupleToObject<T extends readonly PropertyKey[]> = { [K in keyof T]: T[K] }

    Mapowanie po keyof T, gdy T jest krotką, oddaje *krotkę*, a nie obiekt — mapowanie jest homomorficzne, więc zachowuje tablicowość razem z całą resztą. ["a", "b"] mapuje się na ["a", "b"], co jest całkiem dobrą odpowiedzią na pytanie, którego nikt nie zadał.

    Linia po linii

    1. T[number]

      Indeksowanie krotki przez number pyta o „typ pod dowolnym indeksem”, czyli unię wszystkiego, co w niej jest: "a" | "b". Ta unia to zbiór kluczy, po którym naprawdę chcesz iterować.

    2. { [K in T[number]]: K }

      Ponieważ zbiór kluczy jest obliczany, a nie jest keyof T, mapowanie przestaje być homomorficzne — i właśnie dlatego wynikiem jest zwykły obiekt.

    Do zapamiętania

    keyof T na krotce oznacza jej indeksy; T[number] oznacza jej zawartość. Sięgnięcie po niewłaściwe zamienia obiekt w krotkę albo odwrotnie, a komunikat błędu rzadko to mówi.

    Wykorzystuje