如何实现解构及Obejct.assign?

如何实现解构及Obejct.assign?

HarmonyOS
2024-05-23 22:35:24
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
xcbaby

Arkts是静态类型,而解构是依赖于结构兼容性的动态特性并且解构声明中的名称必须和解构对象中的属性名称一致,因此不支持解构。TS到ArkTS的适配规则

不支持解构赋值:ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。

let data: Number[] = [1, 2, 3, 4];//临时变量 
let head = data[0]; 
let tail: Number[] = []; 
for (let i = 1; i < data.length; ++i) { 
  tail.push(data[i]); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

ArkTS不支持解构变量声明:依赖于结构兼容性的动态特性并且解构声明中的名称必须和被解构对象中的属性名称一致。

class Point { 
  x: number = 0.0 
  y: number = 0.0 
} 
  
function returnZeroPoint(): Point { 
  return new Point(); 
} 
  
// 创建一个局部变量来处理每个字段 
let zp = returnZeroPoint(); 
let x = zp.x; 
let y = zp.y;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

不支持参数解构的函数声明:ArkTS要求实参必须直接传递给函数,且必须指定到形参。

function drawText(text: String, location: number[], bold: boolean) { 
  let x = location[0]; 
  let y = location[1]; 
  text; 
  x; 
  y; 
  bold; 
} 
  
function main() { 
  drawText('Hello, world!', [100, 50], true); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

如何使用Object.assign

1、业务侧在TS文件中封装工具方法

// ts 
export class ObjectUtil { 
  static Assign<T extends {}, U>(target: T, source: U): T & U{ 
    return Object.assign(target, source); 
  } 
} 
  
//ets使用 
const target: Record<string, Object> = { "a": 1, "b": 2, }; 
const source: Record<string, Object> = { "b": 4, "c": 5, } 
const returnedTarget = ObjectUtil.Assign(target, source); 
  
console.log(JSON.stringify(target)) 
// Expected output: Object {"a":1,"b":4,"c":5}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

2、业务侧封装实现assign方法

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 
  
  constructor(v1:number, v2:number) { 
    this.b = v1; 
    this.c = v2; 
  } 
} 
  
const target: Record<string, Object> = { "a": 1, "b": 2, } 
const source: D = new D(4,5) 
const returnedTarget: Record<string, Object> = assign(target, source) 
  
console.log(JSON.stringify(target)) 
// Expected output: Object {"a":1,"b":4,"c":5}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
分享
微博
QQ
微信
回复
2024-05-24 22:10:38
相关问题
HarmonyOS object.assign实现
925浏览 • 1回复 待解决
HarmonyOS ArkTS如何解构对象
443浏览 • 1回复 待解决
Object.assign()的替代方法
1029浏览 • 1回复 待解决
HarmonyOS 后续是否会支持解构赋值
925浏览 • 1回复 待解决
HarmonyOS Object.assign(target, source)报错
2249浏览 • 2回复 待解决
woekertaskpool的简单实现
1748浏览 • 1回复 待解决
HarmonyOS api 11 Object.assign 会报红
830浏览 • 1回复 待解决
应用通用获焦走焦方式如何实现
2793浏览 • 1回复 待解决
HarmonyOS代码规范扫描的方案实现
712浏览 • 1回复 待解决
HarmonyOS 如何获取设备网络类型ip
909浏览 • 1回复 待解决
如何支持HarmonyOS调用JS方法传参?
1365浏览 • 1回复 待解决