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

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    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

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

    Wykorzystuje