Rozwiązanie z komentarzem
Opublikowano 15 września 2026Rozwiązanie
type Defined<T> = T extends null | undefined ? never : TNajczęstsza błędna odpowiedź
type Defined<T> = [T] extends [null | undefined] ? never : TOwinię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
T extends null | undefined ? never : TPonieważ
Tjest gołe, to wykonuje się raz na składnik.stringprzeżywa,nullstaje sięnever, a wyniki są z powrotem sklejane w unię.neverZamiana składnika w
neverto sposób na jego usunięcie:string | neverupraszcza się dostringi 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.

