DeepPartial<T>
DeepPartial<
T> =Textendsobject?{ [P in keyof T]?: DeepPartial<T[P]> }:T
Makes all properties of T optional recursively, at every depth level.
Unlike TypeScript's built-in Partial<T> which only affects the first level,
DeepPartial<T> makes nested object properties optional as well.
Type Parameters
T: T
The type to make deeply partial
Since
2.0.0
Example
type Config = {
server: {
host: string;
port: number;
};
debug: boolean;
};
// Partial`<Config>` = { server?: { host: string; port: number }; debug?: boolean }
// ⚠️ server.host and server.port are still required!
// DeepPartial`<Config>` = { server?: { host?: string; port?: number }; debug?: boolean }
// ✅ Everything is optional at all levels
function updateConfig(patch: `DeepPartial<Config>`) {
// Can pass just { server: { port: 8080 } }
}