Deep partial type
TypeScript
export type DeepPartial<T> = {
[K in keyof T]?: T[K] extends (...args: never[]) => unknown
? T[K]
: T[K] extends object
? DeepPartial<T[K]>
: T[K];
};
interface Config {
server: { host: string; port: number };
features: string[];
}
const override: DeepPartial<Config> = {
server: { port: 8080 },
};
// override.server?.host is string | undefined