Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 234 · 17 sierpnia 2026 · Łatwa

    KrotkaNaUnię

    Zaimplementuj TupleToUnion<T>, aby zamieniał krotkę w unię typów jej elementów. Całość to jeden dostęp indeksowany.

    01

    Spróbuj rozwiązać samodzielnie

    Par 2

    Zagadka

    tuple-to-union.ts
    Podejście 1 z 2Jeszcze nie sprawdzone

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

    Testy

    3
    • TupleToUnion<[1, 2, 3]>—
      → 1 | 2 | 3
    • TupleToUnion<['a']>—
      → 'a'
    • TupleToUnion<[]>—
      → never

    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 18 sierpnia 2026

    Rozwiązanie

    type TupleToUnion<T extends readonly unknown[]> = T[number]

    Najczęstsza błędna odpowiedź

    type TupleToUnion<T extends readonly unknown[]> =
      T extends readonly [infer H, ...infer R] ? H : never

    Rozsądny odruch — rozłóż i weź głowę — ale na tym się kończy i zwraca tylko pierwszy element. Rekurencja i złączenie wyników zadziałałyby, tyle że to droga okrężna: T[number] robi to od razu.

    Linia po linii

    1. T[number]

      Dostęp indeksowany, którego kluczem jest cały typ number. Skoro każdy poprawny indeks liczbowy wybiera jeden element, zapytanie o wszystkie naraz daje unię typów wszystkich elementów.

    2. TupleToUnion<[]>

      Pusta krotka nie ma żadnego poprawnego indeksu liczbowego, więc wraca unia zera rzeczy — a unia niczego to never.

    Do zapamiętania

    Sięgaj po rekurencję dopiero wtedy, gdy indeksowanie nie wyraża pytania. T[number], keyof T i T[keyof T] odpowiadają na zaskakująco dużą część problemów z krotkami i obiektami w jednej linii.

    Wykorzystuje