2023-03-28 21:32:54 +08:00
|
|
|
import { isPlainObject } from './isTypes';
|
|
|
|
|
|
|
|
export function deepMerge<T extends AnyObject>(...objs: T[]): T {
|
|
|
|
const result: AnyObject = {};
|
|
|
|
|
2023-04-02 18:26:24 +08:00
|
|
|
for (const obj of objs) {
|
|
|
|
for (const [key, val] of Object.entries(obj)) {
|
|
|
|
if (isPlainObject(val)) {
|
|
|
|
const rVal = result[key];
|
|
|
|
result[key] = isPlainObject(rVal)
|
|
|
|
? deepMerge(rVal, val)
|
|
|
|
: deepMerge(val);
|
2023-03-28 21:32:54 +08:00
|
|
|
} else {
|
|
|
|
result[key] = val;
|
|
|
|
}
|
2023-04-02 18:26:24 +08:00
|
|
|
}
|
|
|
|
}
|
2023-03-28 21:32:54 +08:00
|
|
|
|
|
|
|
return result as T;
|
|
|
|
}
|