type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; } : T;