remeda
Version:
A utility library for JavaScript and Typescript.
37 lines (35 loc) • 2.25 kB
text/typescript
import { MergeDeep } from "type-fest";
//#region src/mergeDeep.d.ts
/**
* Merges the `source` object into the `destination` object. The merge is similar to performing `{ ...destination, ... source }` (where disjoint values from each object would be copied as-is, and for any overlapping props the value from `source` would be used); But for *each prop* (`p`), if **both** `destination` and `source` have a **plain-object** as a value, the value would be taken as the result of recursively deepMerging them (`result.p === deepMerge(destination.p, source.p)`).
*
* @param destination - The object to merge into. In general, this object would have it's values overridden.
* @param source - The object to merge from. In general, shared keys would be taken from this object.
* @returns The merged object.
* @signature
* R.mergeDeep(destination, source)
* @example
* R.mergeDeep({ foo: 'bar', x: 1 }, { foo: 'baz', y: 2 }) // => { foo: 'baz', x: 1, y: 2 }
* @dataFirst
* @category Object
*/
declare function mergeDeep<Destination extends object, Source extends object>(destination: Destination, source: Source): MergeDeep<Destination, Source>;
/**
* Merges the `source` object into the `destination` object. The merge is similar to performing `{ ...destination, ... source }` (where disjoint values from each object would be copied as-is, and for any overlapping props the value from `source` would be used); But for *each prop* (`p`), if **both** `destination` and `source` have a **plain-object** as a value, the value would be taken as the result of recursively deepMerging them (`result.p === deepMerge(destination.p, source.p)`).
*
* @param source - The object to merge from. In general, shared keys would be taken from this object.
* @returns The merged object.
* @signature
* R.mergeDeep(source)(destination)
* @example
* R.pipe(
* { foo: 'bar', x: 1 },
* R.mergeDeep({ foo: 'baz', y: 2 }),
* ); // => { foo: 'baz', x: 1, y: 2 }
* @dataLast
* @category Object
*/
declare function mergeDeep<Source extends object>(source: Source): <Destination extends object>(target: Destination) => MergeDeep<Destination, Source>;
//#endregion
export { mergeDeep };
//# sourceMappingURL=mergeDeep-Bw0uatal.d.cts.map