/** * Recursive partial. Leaves functions and arrays intact so callable props * stay callable and array element types are preserved. */ export type DeepPartial = T extends (...args: any[]) => any ? T : T extends readonly unknown[] ? T : T extends object ? { [P in keyof T]?: DeepPartial; } : T;