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.