HarmonyOS 鸿蒙Next ArkTS不支持解构及assign,怎么给对象赋值?
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
解决措施:
可以封装一个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操作的情况,给对象赋值可以通过以下几种方式实现,确保代码兼容性和功能性:
-
直接属性赋值: 直接通过点操作符为对象的属性赋值。例如:
let obj = {}; obj.property = value;
-
对象扩展(浅拷贝): 使用对象扩展操作符(
...
)进行对象的浅拷贝,然后添加或覆盖属性。虽然这不是解构,但可以达到类似效果:let newObj = { ...oldObj, newProperty: newValue };
-
使用函数封装: 创建一个函数来封装对象属性赋值的逻辑,提高代码的可读性和可维护性。
-
Object.defineProperty: 使用
Object.defineProperty
方法来定义或修改对象的属性,允许更精细地控制属性行为。
请注意,ArkTS作为鸿蒙系统的脚本语言,其特性和限制可能与标准TypeScript有所不同。如果上述方法仍然无法满足需求,可能是由于ArkTS的特定版本或环境限制导致。此时,建议查阅最新的ArkTS官方文档或直接联系官网客服获取更专业的支持。官网地址是:https://www.itying.com/category-93-b0.html