Rozwiązanie z komentarzem
Opublikowano 27 lipca 2026Rozwiązanie
type Last<T extends readonly unknown[]> = T extends readonly [...unknown[], infer L] ? L : never
Najczęstsza błędna odpowiedź
type Last<T extends readonly unknown[]> = T[number]
Indeksowanie krotki przez `number` daje unię *wszystkich* typów elementów, więc `[1, 2, 3]` daje `1 | 2 | 3`. Informacja o pozycji ginie w chwili takiego indeksowania.
Linia po linii
[...unknown[], infer L]Wzorzec krotki może zawierać dokładnie jeden element rest i wolno mu stać na początku. Dopasowany do krotki o stałej długości, rest pochłania wszystko poza ostatnim miejscem, które wiąże się z `L`.
: neverPusta krotka niczego nie dopasowuje — nie ma ostatniego miejsca do związania — więc gałąź fałszywa odpowiada typem, który nie ma wartości.
Do zapamiętania
Element rest we wzorcu krotki nie musi być ostatni. Wiodące resty to sposób na dotarcie do końca krotki bez liczenia.