Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Kształty obiektów

    Partial

    Czyni każdą właściwość obiektu opcjonalną, na jednym poziomie.

    Czym jest

    Homomorficzny typ mapowany dodający ? do każdego klucza. Ponieważ mapowanie idzie po keyof T dla gołego parametru typu, zachowuje wszystko inne, co napotka — readonly przeżywa, a tablica pozostaje tablicą. To pierwsze narzędzie, jakie większość poznaje, i to najczęściej brane wtedy, gdy chodziło o coś głębszego.

    Przykłady

    • Partial<{ a: string; b: number }>
      →{ a?: string | undefined; b?: number | undefined; }
    • Partial<{ readonly a: string }>
      →{ readonly a?: string | undefined; }

      readonly przeżywa, bo mapowanie jest homomorficzne.

    • Partial<{ a: { b: string } }>
      →{ a?: { b: string; } | undefined; }

      A b pozostaje nietknięte. Zawsze jeden poziom.

    Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.

    Czego nie robi

    • Nie jest głębokie. Zagnieżdżone obiekty zachowują wszystkie właściwości wymagane, co jest najczęstszym zaskoczeniem na tej liście.
    • Opcjonalne to nie to samo co „może być undefined”. Przy exactOptionalPropertyTypes to różne typy, a Partial daje pierwszy z nich.

    Wniosek

    Sięgaj po Partial na kształcie, który faktycznie przypisujesz, nie na całym drzewie. Jeśli chcesz drzewo, rekurencję musisz napisać sam.