/** * Make a type and all its (sub) properties optional. */ export type DeepPartial = T extends any[] ? DeepPartialArray : T extends object ? DeepPartialObject : T; interface DeepPartialArray extends Array> {} type DeepPartialObject = { [P in keyof T]+?: DeepPartial; };