3 回复
出于性能考虑,目前ArkTS限制了ES6的Object.assign()方法的使用。若需要在ets文件中扩展对象属性或合并两个对象时,可以自行实现assign方法。
function assign(target: Record<string, Object>, ...source: Object[]): Record<string, Object> {
for (let s of source) {
for (let k of Object.keys(s)) {
target[k] = Reflect.get(s, k)
}
}
return target
}
class D {b: number, c: number}
const target: Record<string, Object> = { "a": 1, "b": 2, }
const source: D = { b: 4, c: 5 }
const returnedTarget: Record<string, Object> = Object.assign(target, source)
console.log(target)
出于性能考虑,限制了合并的方法。那怎么这个方法就不用了吗,不还是得自己封装吗,说是TypeScirpt的子集,我真想说¥%……&*
HarmonyOS 鸿蒙Next中合并两个对象,由于ArkTS的限制,不能使用展开运算符或Object的API如Object.assign()。一种替代方法是自定义一个合并函数,通过遍历源对象的属性并赋值给目标对象来实现合并。此外,如果对象结构复杂,可以考虑使用lodash的_.merge()等第三方库进行深度合并。如果问题依旧没法解决,请加我微信,我的微信是itying888。