type Last<T extendsreadonlyunknown[]> =
T extendsreadonly [...unknown[], infer L] ? L : never
Najczęstsza błędna odpowiedź
type Last<T extendsreadonlyunknown[]> = 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`.
: never
Pusta 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.