HarmonyOS 鸿蒙Next Arkts如何解构对象

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Arkts如何解构对象

使用如下代码:

private handleRequstSuccess<T extends NetBasicRsp>(res: AxiosResponse, successHandler: (rsp: T) => void): void {
    let rsp: T = res.data as T
    rsp.responseStatusCode = res.status
    rsp.responseCookies = res.headers['set-cookie']
    rsp.responseHeader = {...res.headers} // 解构赋值以避免循环引用
    let test = JSON.stringify(res.data) // 报错,循环引用
}

在网络请求回调中,需要根据AxiosResponse对象的转换成自定义的NetBasicRsp对象,但转换后进行JSON转换时报循环引用错误,主要是rsp.responseHeader = res.headers这行代码导致循环引用,这里需要将res.headers对象解构出来赋值给 rsp.responseHeader对象(深拷贝)。 请问在Arkts中如何正确的实现此功能?


更多关于HarmonyOS 鸿蒙Next Arkts如何解构对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

这个是序列化时遇到循环引用的问题,目前可通过主动检测到存在重复时,忽略处理去解决。

可参考以下代码:

// 有如下3个接口
export interface A {
id: number;
name: string;
c?: C;
}

export interface B {
a: A;
}

export interface C {
b: B;
}

@Entry
@Component
struct Page1 {

build() {
Column() {
Button('test loop link')
.onClick(() => {
//构造循环引用样例
let a1: A = {
id: 100,name:'hello1'
}

let b1: B = {
a: a1
}

let c1: C = {
b: b1
}

a1.c = c1;

// let strC1 = JSON.stringify(c1) //执行这里时会抛出异常
// console.info(`DZG strC1: ${strC1}`)

// 以下为解决方案
const seen = new WeakSet();


let strC: string = JSON.stringify(c1,(key: string,value: object) => {
if (typeof value === "object" && value !== null) {
if (seen.has(value)) {
return ;
}
seen.add(value);
}
return value;
});
console.info(`DZG strC: ${strC}`)
})
}
}

更多关于HarmonyOS 鸿蒙Next Arkts如何解构对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next Arkts环境中,解构对象通常涉及对对象内部数据成员的访问和分解。鸿蒙系统的ArkTS(Ark TypeScript)扩展了TypeScript的能力,使其能够更高效地开发原生应用。解构对象在ArkTS中与其他现代JavaScript或TypeScript环境类似。

在ArkTS中解构对象的语法与标准的ES6(ECMAScript 2015)解构赋值语法一致。假设你有一个对象,你可以通过以下方式解构它:

// 假设有一个对象
const person = {
    name: 'Alice',
    age: 30,
    address: {
        city: 'Wonderland',
        zip: '12345'
    }
};

// 解构对象
const { name, age, address: { city, zip } } = person;

// 现在可以直接使用解构后的变量
console.log(name); // 输出: Alice
console.log(age); // 输出: 30
console.log(city); // 输出: Wonderland
console.log(zip); // 输出: 12345

在鸿蒙ArkTS环境中,上述代码同样适用,允许你方便地访问和分解对象内部的数据。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部