diff --git a/types/index.d.ts b/types/index.d.ts index 7a54a3f..1543370 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -3,14 +3,12 @@ type DeepMergeAll< Ts extends readonly any[], Options extends deepmerge.Options -> = Ts extends readonly [infer T1, ...any[]] - ? Ts extends readonly [any, infer T2, ...infer TRest] - ? TRest extends readonly never[] - ? DeepMerge - : unknown // DeepMerge, Options> - : T1 - : never; - +> = { + 0: Ts[0]; + 1: Ts extends [infer T1, ...infer TRest] + ? DeepMerge, Options> + : Ts; +}[Ts extends readonly [any, any, ...any[]] ? 1 : 0]; type DeepMerge = IsSame< T1, @@ -51,22 +49,28 @@ type DeepMergeObjectProps< [K in keyof T1]: Options["customMerge"] extends undefined ? DeepMerge, ValueOfKey, Options> : ReturnType> extends undefined - ? DeepMerge, ValueOfKey, Options> - : ReturnType>>>; + ? DeepMerge, ValueOfKey, Options> + : ReturnType< + NonNullable>> + >; } & { [K in keyof T2]: Options["customMerge"] extends undefined ? DeepMerge, ValueOfKey, Options> : ReturnType> extends undefined - ? DeepMerge, ValueOfKey, Options> - : ReturnType>>>; + ? DeepMerge, ValueOfKey, Options> + : ReturnType< + NonNullable>> + >; } : { [K in keyof (T1 & T2)]: Options["customMerge"] extends undefined ? DeepMerge, ValueOfKey, Options> : ReturnType> extends undefined - ? DeepMerge, ValueOfKey, Options> - : ReturnType>>>; + ? DeepMerge, ValueOfKey, Options> + : ReturnType< + NonNullable>> + >; }; type DeepMergeArrays< @@ -112,7 +116,9 @@ type ArrayMerge = ( type ObjectMerge = ( key: string, options: Required -) => ((target: any, source: any, options?: deepmerge.Options) => any) | undefined; +) => + | ((target: any, source: any, options?: deepmerge.Options) => any) + | undefined; type IsMergeable = (value: any) => boolean;