HarmonyOS 使用axios网络请求数据类型不一致?

我在网络请求时定义的数据类型与后台不一致时,不能自动转成本地定义的类型

export interface User{
  id:string //1,本地定义成string,而后台实际是number
  name:string
}
main(){
  axios.get().then((user:User)=>{
    console.log(user.id.length)//2,执行时报错,因为实际类型是number没有length属性
  })
}

以上代码在执行到注释2时会报错

问题:网络请求从接口获取的后台数据与本地定义的数据类型当字段不一致时,有什么好办法能够使数据自动转变成本地定义的类型

阅读 589
1 个回答

可以使用class-transformer和reflect-metadata这两个工具来实现。

以下是具体步骤:

1.安装依赖:使用ohpm install安装class-transformer和reflect-metadata。

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

json { "name": "John", "age": 30, "isMale": true }

3.使用@Type注释指定嵌套类型:在类定义中,使用@Type注释来指定嵌套类型。 例如:

typescript class Person {
  @Type(() => String) name: string;
  @Type(() => Number) age: number;
  @Type(() => Boolean) isMale: boolean;
}

typescript class Person {
  @Type(() => String) name: string;
  @Type(() => Number) age: number;
  @Type(() => Boolean) isMale: boolean;
} 

4.使用plainToClass方法转换JSON字符串:使用class-transformer中的plainToClass方法将JSON字符串转换为对象。 例如:

typescript import {plainToClass} from'class-transformer';
const person = plainToClass(Person, JSON.parse(jsonString)); 

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

参考文档:

https://github.com/typestack/class-transformer

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进