Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 248 · 31 sierpnia 2026 · Łatwa

    Czy to never?

    Zaimplementuj IsNever<T>, aby dawał true, gdy T to dokładnie never, a false dla wszystkiego innego.

    01

    Spróbuj rozwiązać samodzielnie

    Par 2

    Zagadka

    is-never.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
    • IsNever<never>—
      → true
    • IsNever<string>—
      → false
    • IsNever<never | string>—
      → false

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

    Rozwiązanie

    type IsNever<T> = [T] extends [never] ? true : false

    Najczęstsza błędna odpowiedź

    type IsNever<T> = T extends never ? true : false

    To zwraca never, nie true. Typ warunkowy z gołym parametrem typu dystrybuuje się po uniach, a never to unia pusta — nie ma więc żadnych składników do rozdzielenia, warunek nie wykonuje się ani razu i wynikiem znów jest unia pusta.

    Linia po linii

    1. [T] extends [never]

      Owinięcie w krotkę nie jest ozdobą: sprawia, że lewa strona przestaje być gołym parametrem typu, co wyłącza dystrybucję i pozwala porównać sam never.

    2. IsNever<never | string>

      never | string to po prostu string — never znika z unii w chwili, gdy do niej wchodzi. Odpowiedź brzmi false, bo typ, który przyszedł, od początku nie był never.

    Do zapamiętania

    never to unia pusta i ten jeden fakt tłumaczy większość jego dziwnych zachowań: dystrybucja po nim nie robi nic, a on sam znika z każdej unii, do której trafi.

    Wykorzystuje