33 lines
878 B
TypeScript
33 lines
878 B
TypeScript
|
// @ts-nocheck
|
|||
|
/**
|
|||
|
* 深度合并两个对象,用默认值填充目标对象中未定义的属性
|
|||
|
*
|
|||
|
* @template T - 合并对象的泛型类型
|
|||
|
* @param {T} obj - 目标对象(将被修改)
|
|||
|
* @param {T} defaults - 包含默认值的对象
|
|||
|
* @returns {T} 合并后的对象(即修改后的obj参数)
|
|||
|
*/
|
|||
|
|
|||
|
export function merge<T>(obj : T, defaults : T) : T {
|
|||
|
// #ifdef APP-ANDROID
|
|||
|
try {
|
|||
|
if(obj instanceof UTSJSONObject && defaults instanceof UTSJSONObject) {
|
|||
|
return UTSJSONObject.assign<T>(obj, defaults)!// as T
|
|||
|
}
|
|||
|
const obj1 = { ...toRaw(obj) }
|
|||
|
const obj2 = { ...toRaw(defaults) }
|
|||
|
return UTSJSONObject.assign<T>(obj1, obj2)!
|
|||
|
} catch (error) {
|
|||
|
return defaults
|
|||
|
}
|
|||
|
// #endif
|
|||
|
|
|||
|
// #ifndef APP-ANDROID
|
|||
|
for (const key in defaults) {
|
|||
|
if (obj[key] === undefined || obj[key] === null) {
|
|||
|
obj[key] = defaults[key];
|
|||
|
}
|
|||
|
}
|
|||
|
return obj;
|
|||
|
// #endif
|
|||
|
}
|