type MergeFunction = (objValue: any, srcValue: any, key: string) => any;
/**
 * Deep-merges `source` into `target`, returning a new object.
 *
 * - When `mergeFunction` is provided, it is invoked first for every key. If
 *   it returns a non-`undefined` value, that value is used; returning
 *   `undefined` falls back to default merging.
 * - Default merging: plain objects on both sides are merged recursively;
 *   everything else (primitives, arrays, mismatched types) is taken from source.
 */
export declare function mergeDeep<T extends object, S extends object>(target: T, source: S, mergeFunction?: MergeFunction): T & S;
export {};
