declare namespace deepmerge { interface Options { arrayMerge?(target: any[], source: any[], options?: ArrayMergeOptions): any[]; clone?: boolean; customMerge?: (key: string, options?: Options) => ((x: any, y: any) => any) | undefined; isMergeableObject?(value: object): boolean; cloneUnlessOtherwiseSpecified?(value: any, options?: Options): any; } interface ArrayMergeOptions extends Options { cloneUnlessOtherwiseSpecified(value: any, options?: Options): any; } } declare function deepmerge(target: Partial, source: Partial, options?: deepmerge.Options): T; declare function deepmerge(target: Partial, source: Partial, options?: deepmerge.Options): T1 & T2; declare namespace deepmerge { var all: typeof deepmergeAll; } declare function deepmergeAll = Record>(array: ReadonlyArray, options?: deepmerge.Options): T; export default deepmerge;