Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 262 · 14 września 2026 · Łatwa

    Wyrzuć nulle

    Zaimplementuj Defined<T>, aby usuwał null i undefined z unii, zostawiając całą resztę na miejscu.

    01

    Spróbuj rozwiązać samodzielnie

    Par 2

    Zagadka

    non-nullable.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
    • Defined<string | null>—
      → string
    • Defined<number | undefined | null>—
      → number
    • Defined<null>—
      → never

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

    Rozwiązanie

    type Defined<T> = T extends null | undefined ? never : T

    Najczęstsza błędna odpowiedź

    type Defined<T> = [T] extends [null | undefined] ? never : T

    Owinięcie w krotkę wyłącza dystrybucję, a dystrybucja jest dokładnie tym, czego ta zagadka potrzebuje. string | null jest teraz sprawdzane jako całość: nie da się go przypisać do null | undefined, więc warunek wybiera gałąź fałszywą i oddaje unię w niezmienionej postaci, z null w środku.

    Linia po linii

    1. T extends null | undefined ? never : T

      Ponieważ T jest gołe, to wykonuje się raz na składnik. string przeżywa, null staje się never, a wyniki są z powrotem sklejane w unię.

    2. never

      Zamiana składnika w never to sposób na jego usunięcie: string | never upraszcza się do string i nikt niczego nie musi filtrować.

    Do zapamiętania

    Dystrybucja to funkcja, nie przypadek. Po owinięcie [T] sięgaj tylko wtedy, gdy pytasz o unię jako całość — i nigdy, gdy chcesz edytować jej składniki.

    Wykorzystuje