Rozwiązanie z komentarzem
Opublikowano 18 sierpnia 2026Rozwią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
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.
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.