Unie
Non Nullable
Usuwa null i undefined z typu.
Czym jest
Warto przeczytać definicję. Kiedyś był dystrybutywnym warunkiem; od TypeScriptu 4.8 to T & {}, bo przecięcie z pustym typem obiektowym usuwa dokładnie te dwa typy, które nie mogą mieć właściwości. Krócej, szybciej i już nie dystrybutywnie — co ma znaczenie tylko w narożnikach.
Przykłady
NonNullable<string | null>→stringNonNullable<string | undefined | null>→stringNonNullable<null>→never
Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.
Czego nie robi
- Nie rusza zagnieżdżonej właściwości.
NonNullable<{ a: string | null }>pozostaje bez zmian — nullowalność jest w środku, a to działa na zewnątrz. - Nie zawęża wartości w czasie wykonania. Zmienna typu
string | nullwciąż potrzebuje sprawdzenia; to tylko opisuje typ po nim.
Wniosek
Definicja zmieniła się wszystkim pod nogami w 4.8 i prawie nikt nie zauważył — to argument za cytowaniem definicji zamiast pamiętania ich.

