/** * 对象浅拷贝 * @param target 目标对象 * @param source 源对象 * @returns */ export function merge(target: T, ...source: T[]): T { source.forEach((e) => { for (const key in e) { if (Object.prototype.hasOwnProperty.call(target, key)) { target[key] = e[key]; } } }) return target; } /** * 对象深拷贝 * @param target 目标对象 * @param source 源对象 * @returns */ export function deepMerge(target: T, source: T): T { for (const key in source) { // 判断属性是否存在 if (Object.prototype.hasOwnProperty.call(target, key)) { const t = target[key]; const s = source[key]; // 对象属性类型检查 switch (Object.prototype.toString.call(t)) { case '[object Object]': target[key] = deepMerge(t, s); break; case '[object Array]': if (Array.isArray(t) && Array.isArray(s)) { target[key] = t.reduce((prev, cur, i) => { const value = deepMerge(cur, s[i]); prev.push(value); return prev; }, []) } break; default: target[key] = s; } } } return target; }