Przejdź do treści
webtype.orgNonNullable

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Unie

    NonNullable

    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>
      string
    • NonNullable<string | undefined | null>
      string
    • NonNullable<null>
      never

    Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.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 | null` wciąż 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.