Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 255 · 7 września 2026 · Łatwa

    Pierwszy

    Zaimplementuj First<T>, aby dawał typ pierwszego elementu krotki T, a dla pustej T — never.

    01

    Spróbuj rozwiązać samodzielnie

    Par 2

    Zagadka

    head-tuple.ts
    Podejście 1 z 2Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

    3
    • First<[1, 2, 3]>—
      → 1
    • First<[]>—
      → never
    • First<[string]>—
      → string

    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 8 września 2026

    Rozwiązanie

    type First<T extends readonly unknown[]> = T extends [infer H, ...unknown[]] ? H : never

    Najczęstsza błędna odpowiedź

    type First<T extends readonly unknown[]> = T extends [infer H] ? H : never

    Jednoelementowy wzorzec pasuje do jednoelementowych krotek i do niczego więcej. First<[string]> działa, First<[1, 2, 3]> spada prosto do never, a zagadka wygląda na w połowie rozwiązaną, bo jedno sprawdzenie przechodzi. Wzorzec musi powiedzieć „a potem cokolwiek”.

    Linia po linii

    1. [infer H, ...unknown[]]

      Reszta jest rozwinięta jako unknown[], a nie wywnioskowana, bo nic jej tu nie potrzebuje. Nazywanie tego, czego nie użyjesz, to najczęstszy sposób, w jaki te wzorce robią się trudniejsze do czytania, niż są.

    2. : never

      never to uczciwa odpowiedź na „nie ma takiego elementu” — a nie undefined, które twierdziłoby, że element jest, tylko brakuje jego wartości.

    Do zapamiętania

    Wzorce krotek są dosłowne. [H] znaczy „krotka długości jeden”, a jeśli chodziło ci o „co najmniej jeden”, musisz dopisać resztę.

    Wykorzystuje