import type { Paths, UnknownRecord } from 'type-fest'; type MergedType = A extends UnknownRecord ? B extends UnknownRecord ? A & B : MergedArray : MergedArray; type MergedArray = A extends any[] ? B extends any[] ? Array : keyof B extends `${number}` ? Array : B : B; /** * deep merge an object * @param source default object if no additional property is supplied * @param target properties to be merged with the default * @returns merged object */ export declare function merge>(source: S, target?: T): R; /** * merge an array with any value * @param source the source array to be merged * @param target new replacement * @returns merged value */ export declare function mergeArray(source: S[], target?: T): MergedArray; /** * merge two arrays * @param source the source array to be merged * @param target new replacement * @returns merged array */ export declare function mergeArrays(source: S[], target: T[]): MergedArray; /** * annotate an array for key-based merging during preset resolution * @param key the property name used to identify matching elements across arrays * @param items the array of objects to annotate * @returns a shallow copy of the array with a non-enumerable merge key annotation */ export declare function mergeByKey, K extends string & Paths>(key: K, items: T[]): T[]; /** * merge an object with any value * @param source the source object to be merged * @param target new replacement * @returns merged value */ export declare function mergeObject(source: S, target?: T): MergedType; export {}; //# sourceMappingURL=merge.d.ts.map