Przejdź do treści
webtype.org#218 last-element · par 3

Nr 218 · 26 lipca 2026 · Średnia

Ostatni

Zaimplementuj `Last<T>`, aby zwracał typ ostatniego elementu krotki. Pusta krotka nie ma ostatniego elementu — zwróć `never`.

01

Spróbuj rozwiązać samodzielnie

Par 3

Zagadka

last-element.ts
Podejście 1 z 3Jeszcze nie sprawdzone

Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej.

Testy

4
  • Last<[1, 2, 3]>
    3
  • Last<['only']>
    'only'
  • Last<[]>
    never
  • Last<[string, number]>
    number

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

Nobody is counting yet. Score distribution and the gra na krótkim dystansie board arrive with accounts — until then your results stay on this device.

Archiwum
02

Rozwiązanie z komentarzem

Opublikowano 27 lipca 2026

Rozwią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

  1. [...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`.

  2. : 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.