Skip to main content

DeepPartial<T>

DeepPartial<T> = T extends object ? { [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 } }
}