【关键字】
ArkTS / JS / 扩展Object / 动态合并 / map
【问题描述】
TS的很多标准库和语法都被ArkTS做了限制,导致很多便捷的JS语法及方法无法使用,ArkTS有没有替代方法?比如有很多场景是需要扩展一个Object的属性,或者将多个object进行动态合并,除了转为map然后遍历插入键值对之外,有没有官方的替代方法?
【解决方案】
map是可以的,扩展属性就是点的形式,合并的话,也可以初始化一个Record<string, Object>对象,Object.entries遍历在ets文件中可自行实现assign,使用Record<string, Object>结合for循环遍历。
参考代码如下:
function assign(target: Record<string, Object>, ...source: Object[]): Record<string, Object> {
for (const items of source) {
for (const key of Object.keys(items)) {
target[key] = Reflect.get(items, key)
}
}
return target;
}
interface add {
testadd: Object
}
interface IMerge {
a: add,
b?: number,
c?: string,
}
let c: Record<string, Object> = {
'testc': 'c'
}
let a: IMerge =
{
a: {
testadd: 1
}
}
let b = assign(c, a);
console.log('b is ' + JSON.stringify(b));