@cloudcome/utils-core
Version:
cloudcome core utils
73 lines (72 loc) • 2.5 kB
TypeScript
import { AnyArray, AnyObject } from '../types';
export type ObjectMergeRule = {
/**
* 处理冲突
* @param target - 目标对象
* @param source - 源对象
* @param key - 键名
* @returns 返回 true 表示继续处理,否则返回 false
*/
next: (info: {
target: AnyObject | AnyArray;
source: AnyObject | AnyArray;
key: string | number;
}) => boolean;
/**
* 处理赋值
* @param target - 目标对象
* @param source - 源对象
* @param key - 键名
* @returns 返回处理后的值
*/
assign: (info: {
target: AnyObject | AnyArray;
source: AnyObject | AnyArray;
key: string | number;
merge: () => any;
}) => any;
};
/**
* 合并多个对象或数组。如果遇到循环引用,则直接返回目标对象。
*
* @param target - 目标对象或数组。
* @param sources - 要合并的源对象或数组。
* @returns 合并后的对象或数组。
*
* @example
* ```typescript
* const obj1 = { a: 1, b: { x: 10 } };
* const obj2 = { b: { y: 20 }, c: 3 };
* const merged = objectMerge(obj1, obj2);
* console.log(merged); // { a: 1, b: { x: 10, y: 20 }, c: 3 }
* ```
*/
export declare function objectMerge(target: AnyObject | AnyArray, ...sources: (AnyObject | AnyArray)[]): AnyObject | AnyArray;
/**
* 为对象设置默认值。如果目标对象中的属性为 `undefined`,则使用默认对象中的属性值。
* 支持多个默认对象,优先级从左到右依次降低。
* 如果目标对象中的属性已经是对象或数组,则递归地设置默认值。
*
* @param target - 目标对象或数组。
* @param defaults - 默认对象或数组。
* @returns 合并后的对象或数组。
*
* @example
* ```typescript
* const obj = { a: 1, b: undefined };
* const defaults = { a: 4, b: 2, c: 3 };
* const result = objectDefaults(obj, defaults);
* console.log(result); // { a: 1, b: 2, c: 3 }
*
* const obj2 = { a: 1, b: 2 };
* const defaults2 = { a: 5, b: 3, c: 4 };
* const result2 = objectDefaults(obj2, defaults2);
* console.log(result2); // { a: 1, b: 2, c: 4 }
*
* const obj3 = { a: { x: 1 }, b: undefined };
* const defaults3 = { a: { x: 4, z: 3 }, b: { y: 2 } };
* const result3 = objectDefaults(obj3, defaults3);
* console.log(result3); // { a: { x: 1, z: 3 }, b: { y: 2 } }
* ```
*/
export declare function objectDefaults<T extends AnyObject | AnyArray>(target: T, defaults: T): T;