diff --git a/types/shared.ts b/types/shared.ts index 200230443..15106125b 100644 --- a/types/shared.ts +++ b/types/shared.ts @@ -1311,16 +1311,23 @@ export type KeysWithUndefined = { : never; }[keyof T]; -export type Optionalize = T extends Collection ? T : T extends object ? Id< - & { - [K in KeysWithUndefined]?: T[K] extends Collection ? T[K] : Optionalize; - } - & { - [K in Exclude>]: T[K] extends object ? {} extends Pick ? T[K] - : T[K] extends Collection ? T[K] - : T[K] extends unknown[] ? T[K] - : Optionalize - : T[K]; - } -> -: T; +export type Optionalize = + // Collections don't need optionalizing + T extends Collection ? T + // If an array only optionalize objects in arrays + : T extends unknown[] ? T[number] extends Record ? Array> + : T + // Specific optionalizing of {} go here + : T extends object ? Id< + & { + [K in KeysWithUndefined]?: T[K] extends Collection ? T[K] : Optionalize; + } + & { + [K in Exclude>]: T[K] extends object ? {} extends Pick ? T[K] + : T[K] extends Collection ? T[K] + : T[K] extends unknown[] ? T[K] + : Optionalize + : T[K]; + } + > + : T;