HarmonyOS 鸿蒙Next为什么我所有转换的class都为object?

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

HarmonyOS 鸿蒙Next为什么我所有转换的class都为object?

public userLogin(params:string,callBack:Function) {
  this.post(params,this.ApiUserLogin,(data: http.HttpResponse)=>{
    if(data!=null)
    {
//这里获得数据转换后类型为object导致我不能使用instanceof进行类型判断 然后我接口如果返回一个message类的话。
这里也可以转换成object 导致 我根本无法判断到底类型是usermodel 还是messagemodel 请问一下我这个是哪里写错了?
而且我不理解的是 如果接口返回的是message类 我这里转成usermodel 那么应该不成功为null才对啊。这里怎么也可以直接
转成object。
      let model:userModel =  json.parse(data.result.toString()) as userModel;
      if(model instanceof userModel)
      {
        callBack(model);
      }
      callBack(null);
    }
    callBack(null);
  });
}

更多关于HarmonyOS 鸿蒙Next为什么我所有转换的class都为object?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

可以使用class-transformerreflect-metadata这两个工具来实现数据自动转变成本地定义的类型。

以下是具体步骤:

  1. 安装依赖:使用npm install安装class-transformerreflect-metadata

  2. 配置JSON数据:将JSON数据定义为一个类的属性。 例如:

{
  "name": "John",
  "age": 30,
  "isMale": true
}
  1. 使用@Type注释指定嵌套类型:在类定义中,使用@Type注释来指定嵌套类型。 例如:
class Person {
  @Type(() => String) name: string;
  @Type(() => Number) age: number;
  @Type(() => Boolean) isMale: boolean;
}
  1. 使用plainToClass方法转换JSON字符串:使用class-transformer中的plainToClass方法将JSON字符串转换为对象。 例如:
import { Type, plainToClass } from 'class-transformer'
import 'reflect-metadata'

@Observed
class User {
  name: string = '';
  @Type(() => Number)
  age: number = 0;
  isClick: boolean = false;
}

class UserObj {
  @Type(() => User)
  user: User = new User();
}

@Component
struct test1 {
  @State user: User = new User();

  aboutToAppear(): void {
    let responseData : Record<string, ESObject> = {
      "user" : {
        "name" : 'aaaaaaaaaaaa',
        "age" : '12',
        "isClick": false,
      }
    }
    this.user = plainToClass(UserObj, responseData).user;
  }

  build() {
    Column() {
      Row() {
        Text("name:" + this.user.name)
      }

      Row() {
        Text("isClick:" + this.user.isClick)
      }

      Row() {
        if (this.user instanceof User) {
          Text("ageType:" + typeof this.user)
        }
      }
    }
  }
}

通过以上步骤,您可以将JSON字符串中的部分内容转换为对象,并确保只转换所需的部分。

参考文档:

typestack/class-transformer

更多关于HarmonyOS 鸿蒙Next为什么我所有转换的class都为object?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


非常感谢
我有空去试试。。。

不好使啊,崩溃报错

图片

找到问题了,没引用import 'reflect-metadata'导致的,

as是这样的,as不是强制类型转换

怎么才能强转啊。 搜半天也没搜到。 搜了下typescript尖括号的<userModel>这样 发现不支持。

在HarmonyOS(鸿蒙)开发中,如果遇到所有转换的class都为object的情况,这通常与鸿蒙系统的数据类型转换机制或者特定API的使用不当有关。鸿蒙系统基于其独特的方舟编译器和运行时环境,可能在某些类型转换上与传统的Java或Android平台存在差异。

具体到这个问题,可能的原因包括但不限于:

  1. API使用错误:在鸿蒙开发中,可能使用了不恰当的API进行类型转换,导致所有class被统一视为object。检查代码中类型转换的API调用,确保它们适用于鸿蒙系统。

  2. 编译器行为:方舟编译器在优化代码时可能改变了类型信息,导致在运行时观察到的类型与预期不符。这种情况较为罕见,但仍需考虑。

  3. 框架或库的限制:使用的鸿蒙框架或第三方库可能在类型转换上有特定限制或要求,遵循这些限制或调整代码以适应框架要求可能有助于解决问题。

如果上述检查均未能解决问题,可能是鸿蒙系统本身的特性或限制所致。此时,建议查阅鸿蒙系统的官方文档或社区论坛,以获取更多关于类型转换的具体指导。

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

回到顶部