Przejdź do treści

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