type Merged = TSource extends undefined ? TDestination : TDestination extends undefined ? TSource : TSource extends any[] ? TDestination extends any[] ? TDestination & TSource : TSource : TSource extends object ? TDestination extends object ? TDestination extends any[] ? TSource : TDestination & TSource : TSource : TSource; /** * Iterate over source and affect its sub values into destination, recursively. * If the source and destination can't be merged, return source. */ export declare function mergeInto(destination: D, source: S, circularReferenceChecker?: CircularReferenceChecker): Merged; /** * A simplistic implementation of a deep clone algorithm. * Caveats: * - It doesn't maintain prototype chains - don't use with instances of custom classes. * - It doesn't handle Map and Set */ export declare function deepClone(value: T): T; type Combined = A extends null ? B : B extends null ? A : Merged; export declare function combine(a: A, b: B): Combined; export declare function combine(a: A, b: B, c: C): Combined, C>; export declare function combine(a: A, b: B, c: C, d: D): Combined, C>, D>; export declare function combine(a: A, b: B, c: C, d: D, e: E): Combined, C>, D>, E>; export declare function combine(a: A, b: B, c: C, d: D, e: E, f: F): Combined, C>, D>, E>, F>; export declare function combine(a: A, b: B, c: C, d: D, e: E, f: F, g: G): Combined, C>, D>, E>, F>, G>; export declare function combine(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): Combined, C>, D>, E>, F>, G>, H>; interface CircularReferenceChecker { hasAlreadyBeenSeen(value: any): boolean; } export {};