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

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

ArkTS不支持解构及assign 怎么给对象赋值

```javascript
interface A {
  a: string,
  b: number,
  c: Object
}

let test1: A = {}
let test2: A = {} 
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 }

// 自己实现:
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 }

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


在HarmonyOS鸿蒙Next中,ArkTS不支持解构及Object.assign,但可以通过直接赋值的方式给对象赋值。假设有一个对象obj,你可以直接通过属性名进行赋值,例如:

let obj = { a: 1, b: 2 };
obj.a = 3;
obj.b = 4;

如果需要对多个属性进行赋值,可以逐一操作:

let obj = { a: 1, b: 2, c: 3 };
obj.a = 10;
obj.b = 20;
obj.c = 30;

如果需要合并两个对象,可以手动进行属性复制:

let obj1 = { a: 1, b: 2 };
let obj2 = { c: 3, d: 4 };
obj1.c = obj2.c;
obj1.d = obj2.d;

ArkTS的设计理念是保持代码的简洁和可维护性,因此虽然不支持解构和Object.assign,但通过直接赋值的方式也能实现相同功能。

在HarmonyOS的ArkTS中,由于不支持解构和Object.assign,你可以通过手动赋值的方式为对象属性赋值。例如:

let obj1 = { a: 1, b: 2 };
let obj2 = { b: 3, c: 4 };

// 手动赋值
obj1.b = obj2.b;
obj1.c = obj2.c;

console.log(obj1); // 输出: { a: 1, b: 3, c: 4 }

这种方式虽然不如解构或Object.assign简洁,但在ArkTS中是可行的。

回到顶部