Przejdź do treści
webtype.orgwebtype.org

    ↑↓ 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 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 | 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.