HarmonyOS开发,遇到 Object.assign(this, source)报错怎么解决?

最近在升级某个api 9 的鸿蒙项目到api 12,发现项目中较多用到如下图所示这样的代码,然后升级到api12就会编译报错:

Usage of standard library is restricted (arkts-limited-stdlib)。

报错原因

ArkTS 是基于 TypeScript 进行扩展的,虽然大部分 TypeScript 语法和标准库可以使用,但由于 HarmonyOS 平台的特殊性,部分标准库的功能可能无法正常工作,因此对其使用进行了限制。

接下来简单介绍一下这几行代码的作用以及解决办法。

常见用法及语法说明

示例代码
复制代码
class AppInfo {
  constructor(source: Partial<AppInfo>) {
    Object.assign(this, source);
  }
}

// 创建一个 AppInfo 实例
const appInfo = new AppInfo({ name: 'MyApp', version: '1.0' });

// 输出实例的属性
console.log(appInfo.name); // 输出: MyApp
console.log(appInfo.version); // 输出: 1.0
代码整体功能概述

上述代码的主要目的是创建一个 AppInfo 类,动态创建AppInfo实例时,该类的构造函数接收一个 Partial 类型的参数 source,并将 source 对象的所有可枚举属性复制到新创建的 AppInfo 实例中。

首先,定义了一个名为 AppInfo 的类。在 TypeScript 中,类是一种面向对象的编程结构,用于封装数据和行为。

然后,定义了AppInfo的构造函数。

  • constructor 是类的构造函数,当创建 AppInfo 类的实例时,会自动调用这个构造函数。
  • source: Partial 是构造函数的参数,Partial 是 TypeScript的一个工具类型,它的作用是将 AppInfo 类的所有属性都变为可选的。也就是说,source 参数可以包含 AppInfo类的部分或全部属性,也可以不包含任何属性。

**接着,调用Object.assign()。

Object.assign 是 JavaScript 中的一个内置方法,用于将一个或多个源对象的所有可枚举属性复制到目标对象。

解决方案

在 TypeScript 文件中封装一个工具类,然后在ArkTs文件的构造函数直接调用即可。

ObjectUtils.ts文件部分代码:
复制代码
export class ObjectUtils {
  /**
   *对象合并
   * @param target 目标对象
   * @param source 源对象
   * @return 合并后的对象
   **/
  static assign(target: Object, source?: Object): Object {
    return Object.assign(target, source);
  }

  ...

}
调用的代码:
复制代码
class AppInfo {
  constructor(source: Partial<AppInfo>) {
    ObjectUtils.assign(this, source);
  }

  /* 元数据 */
  id: number = 0
  name: string = ''
  desc: string = ''
  icon: string = ''
  vender: string = ''
  packageName: string = ''
  version: string = ''
  hapUrl: string = ''
  type: string = ''
  tags: string = ''
  ......
}

// 使用示例
const source = { name: 'MyApp', version: '1.0' };
const appInfo = new AppInfo(source);
console.log(appInfo.name); 
console.log(appInfo.version); 

至此,这个报错就解决了,项目可以顺利运行。

提醒:这不算难点,大部分开发者都会的,旨在帮助初学者理解代码和优化代码。而且,这是本人认为比较合理的写法,但绝不是唯一方案。

相关推荐
Java的搬运工11 小时前
HarmonyOS ArkUI V2 实战:Schema 驱动表单、2in1 适配与实时通信
harmonyos·arkts·openharmony·harmonyos next·表单校验·arkui v2·2in1
花先锋队长11 小时前
HarmonyOS 7.0正式发布|华为天气空间运镜城市皮肤从4城增至10城
华为·智能手机·harmonyos
贾伟康12 小时前
【口算王|01】HarmonyOS ArkTS 口算题生成实战:按年级、运算类型和难度生成可控题目
算法·harmonyos·arkts·随机生成·口算题
DreamLife☼15 小时前
Agent开发环境搭建完全指南
python·docker·typescript·node·工业知识点
HarmonyOS_SDK15 小时前
基于增强QUIC协议优化弱网下的直播观看体验
harmonyos
安好说AI16 小时前
Flutter 三方库 adaptive_image_picker 的鸿蒙化适配指南:零权限选图、纯 Dart 裁剪与目标大小压缩
flutter·harmonyos
2501_9197490317 小时前
华为鸿蒙免费PDF工具—小羊免费PDF
华为·pdf·harmonyos·鸿蒙
贾伟康19 小时前
【口算王|10】HarmonyOS ArkTS 语音报题实战:协调朗读、作答和页面生命周期
生命周期·harmonyos·arkts·语音交互·texttospeech
贾伟康20 小时前
【口算王|08】HarmonyOS ArkTS 分类训练实战:让年级与运算分类参数保持一致
harmonyos·arkts·数据建模·路由参数·分类训练
光锥智能20 小时前
华为新麒麟芯片、鸿蒙7问世,手机底层竞赛升级
华为·智能手机·harmonyos