HarmonyOS 鸿蒙Next ArkTS不支持解构及assign,怎么给对象赋值?

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTS不支持解构及assign,怎么给对象赋值?

问题现象:

interface A {
a:string = ‘’
b:number = 0
c:Object =
}
let test1:A = {}
let test2:A= {} 

怎么将test1赋值给test2


更多关于HarmonyOS 鸿蒙Next ArkTS不支持解构及assign,怎么给对象赋值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

解决措施:

可以封装一个assign方法

原方法:

function assign<T, U>(target: T, source: U): T & U; 
const target = { a: 1, b: 2 }; 
const source = { b: 4, c: 5 }; 
const returnedTarget = Object.assign(target, source); 
console.log(target); 
// Expected output: Object { a: 1, b: 4, c: 5 }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

自己实现:

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) 
// Expected output: Object { a: 1, b: 4, c: 5 }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next ArkTS不支持解构及assign,怎么给对象赋值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


// 封装方法
// 对象合并
assignFn(target: object,...source:object[]){
// 获取目标对象和第一个源对象的键数组
const targetKeys = Object.keys(target);
const sourceKeys = Object.keys(source[0]);

// 比较长度,确定使用哪个对象的键来进行遍历赋值
if (targetKeys.length > sourceKeys.length) {
for (let key of targetKeys) {
if (source[0][key]) {
target[key] = source[0][key];
} else {
target[key] = target[key];
}
}
} else {
for (let items of source) {
for (let key of Object.keys(items)) {
target[key] = source[key];
}
}
}
return target;
}

// 调用

assignFn({a:1},{a:2,b:1})

在HarmonyOS鸿蒙的ArkTS(Ark TypeScript)环境中,若遇到不支持解构及assign操作的情况,给对象赋值可以通过以下几种方式实现,确保代码兼容性和功能性:

  1. 直接属性赋值: 直接通过点操作符为对象的属性赋值。例如:

    let obj = {};
    obj.property = value;
    
  2. 对象扩展(浅拷贝): 使用对象扩展操作符(...)进行对象的浅拷贝,然后添加或覆盖属性。虽然这不是解构,但可以达到类似效果:

    let newObj = { ...oldObj, newProperty: newValue };
    
  3. 使用函数封装: 创建一个函数来封装对象属性赋值的逻辑,提高代码的可读性和可维护性。

  4. Object.defineProperty: 使用Object.defineProperty方法来定义或修改对象的属性,允许更精细地控制属性行为。

请注意,ArkTS作为鸿蒙系统的脚本语言,其特性和限制可能与标准TypeScript有所不同。如果上述方法仍然无法满足需求,可能是由于ArkTS的特定版本或环境限制导致。此时,建议查阅最新的ArkTS官方文档或直接联系官网客服获取更专业的支持。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部