DeepPartial
Make all fields recursively optional
Make all fields optional, including nested types.
Quick Example
import typemap_extensions as tm
from typemap import eval_typing
class Address:
street: str
city: str
class User:
name: str
address: Address
DeepUser = eval_typing(tm.DeepPartial[User])
# Results in: name: str | None, address: Address | None
# AND inside Address: street: str | None, city: str | NoneSignature
class DeepPartial[T]:
"""Make all fields recursively optional."""What It Does
DeepPartial makes every field optional, including nested types. It recurses into all nested classes.
Partial vs DeepPartial
class Address:
street: str
city: str
class User:
name: str
address: Address
# Partial - only top level
PartialUser = eval_typing(tm.Partial[User])
# name: str | None
# address: Address <-- NOT optional
# DeepPartial - all levels
DeepUser = eval_typing(tm.DeepPartial[User])
# name: str | None
# address: Address | None <-- Also optional!
# street: str | None
# city: str | NoneUse Cases
- Deep updates - Update deeply nested structures
- Recursive validation - Validate any subset of a structure
- Merge operations - Merge objects with partial overrides
TypeScript Comparison
// TypeScript
type DeepUser = DeepPartial<User>;
// typemap
DeepUser = eval_typing(tm.DeepPartial[User])Warning: DeepPartial can be slow on deeply nested structures as it must traverse all levels.