Files
vant/src/utils/deep-assign.ts
T
2020-01-19 15:27:28 +08:00

32 lines
664 B
TypeScript

import { isDef, isObj } from '.';
import { ObjectIndex } from './types';
const { hasOwnProperty } = Object.prototype;
function assignKey(to: ObjectIndex, from: ObjectIndex, key: string) {
const val = from[key];
if (!isDef(val)) {
return;
}
if (
!hasOwnProperty.call(to, key) ||
!isObj(val) ||
typeof val === 'function'
) {
to[key] = val;
} else {
// eslint-disable-next-line no-use-before-define
to[key] = deepAssign(Object(to[key]), from[key]);
}
}
export function deepAssign(to: ObjectIndex, from: ObjectIndex): ObjectIndex {
Object.keys(from).forEach(key => {
assignKey(to, from, key);
});
return to;
}