uni-app x uts类转换

1. uni-app x uts类转换

1.1. uni-app x中处理json数据转换为uts类

目前uni-app x中处理json数据转换为uts类型的方式主要有以下几种:

1.1.1. 使用type定义配合JSON.parse(推荐方式)

使用type定义配合JSON.parse(推荐方式) 根据ISSUE系统的官方回复,建议直接使用type定义,JSON.parse和uni.request都支持传入type泛型来返回:

javascript 复制代码
// 定义type
type UserBean = {
    name : string
    account : string
}
// 使用JSON.parse泛型转换
let user = JSON.parse<UserBean>(jsonString)

1.1.2. 使用UTSJSONObject.parse()(仅支持Android)

使用UTSJSONObject.parse()(仅支持Android) 根据UTSJSONObject文档,parse()方法可以将UTSJSONObject转换为具体类型,但仅支持Android平台(3.90+版本),不支持iOS、Web、鸿蒙等平台。

1.1.3. 类型断言(as)

类型断言(as) 在对话知识库中,有开发者提到对于复杂嵌套的json数据,可能需要使用as进行类型转换,或者一层一层解构处理。

1.1.4. 建议

建议: 如果您需要跨平台支持,建议使用JSON.parse()配合type定义的方式。如果仅在Android端使用UTS插件,可以考虑使用UTSJSONObject.parse()。

1.2. export default 导出类

在 UniApp X 的 UTS 中,支持使用 export default 导出类,但类型定义(type)通常使用命名导出。具体使用方式如下:

1.2.1. 类(Class)的默认导出与导入

(1)导出(.uts 文件):

javascript 复制代码
// 使用 export default 导出类,类必须有名称
export default class MyClass {
  name: string = ""
  constructor(name: string) {
    this.name = name
  }
  sayHello(): void {
    console.log("Hello " + this.name)
  }
}

(2)导入(.uvue 或 .uts 文件):

javascript 复制代码
// 对应 export default 的导出,不需要加 {}
import MyClass from './myclass.uts'
export default {
  onLoad() {
    const instance = new MyClass("UniAppX")
    instance.sayHello()
  }
}

1.2.2. 类型定义(Type)的导出与导入

类型定义(type)不支持使用 export default 导出,应使用命名导出:

(1)导出(.uts 文件)

javascript 复制代码
// 使用 export 导出 type(非 default)
export type Person = {
  name: string,
  age: number
}
export type UserInfo = {
  id: number,
  data: Person
}

(2)导入(.uvue 或 .uts 文件):

javascript 复制代码
// 需要加 {} 进行解构导入
import { Person, UserInfo } from './types.uts'
export default {
  data() {
    return {
      user: {
        name: "张三",
        age: 18
      } as Person
    }
  }
}

1.2.3. 导出包含多个内容的对象

如果需要以 export default 形式导出一组工具函数或类型(类似工具库):

(1)导出(.uts 文件):

javascript 复制代码
export type Config = {
  debug: boolean
}
export function init(config: Config): void {
  console.log(config)
}
// 将多个内容包装成对象默认导出
export default {
  version: "1.0.0",
  init
}

(2)导入(.uvue 或 .uts 文件):

javascript 复制代码
import Utils from './utils.uts'
import { Config } from './utils.uts' // type 仍需单独导入
export default {
  onLoad() {
    console.log(Utils.version)
    Utils.init({ debug: true } as Config)
  }
}

1.2.4. 注意事项

(1)类必须有名称 :使用 export default 导出类时,类声明必须要有名称(如 class MyClass),不能直接导出匿名类。

(2)唯一性 :一个文件中 export default 只能有一个,但 export(命名导出)可以有多个。

(3)跨平台限制 :在 UTS 插件中,只有能正常建立原生类与 JS 类型映射关系的类才能被导出。部分系统类(如 Activity、UIViewController)无法直接 export。

(4)类型位置 :在 .uvue 文件中定义 type 时,必须放在 export default {} 前面。

更多详细内容可参考 UTS 模块导出文档导入文档

1.3. uts 使用JSON 文件

在 HBuilderX 4.25 版本开始,uts 支持直接导入 JSON 文件(如 import data from './data.json')。

如果版本不支持直接导入,或需要在 APP 端(Android/iOS/鸿蒙)获取本地 JSON 文件数据,可以采用以下替代方案:

(1)使用文件系统 API :通过 uni.getFileSystemManager 读取本地文件内容,然后使用 JSON.parse 解析为 UTSJSONObject 或自定义 type 类型

(2)使用网络请求加载本地文件 :通过 uni.request 请求本地 JSON 文件路径(适用于部分平台)

关于 JSON 数据的类型处理,使用 type 定义数据类型,结合 JSON.parse 的泛型参数来转换数据。直接使用type定义即可,JSON.parse和uni.request都支持传入type泛型来返回。

相关推荐
游戏开发爱好者82 小时前
深入理解iOSTime Profiler:提升iOS应用性能的关键工具
android·ios·小程序·https·uni-app·iphone·webview
gskyi2 小时前
UniApp Vue3 数据透传终极指南
javascript·vue.js·uni-app
gskyi3 小时前
uni-app 高阶实战:onLoad与getCurrentPages深度技巧
前端·javascript·vue.js·uni-app
阿奇__19 小时前
uniapp支付宝 H5 开发踩坑,hash模式下取参要规范!
开发语言·uni-app
云起SAAS1 天前
小智笔记APP源码 | 8大广告联盟聚合(穿山甲/优量汇/快手/百度) | 应用市场过审极速版 | uni-app全栈商用项目
笔记·uni-app·广告联盟·笔记app
蹦哒1 天前
UniApp 原生插件开发完整指南
uni-app
a_Ichuan1 天前
在HBuilderX创建的uniapp项目中使用unocss
前端·uni-app
web前端神器1 天前
记录uniapp小程序的报错
小程序·uni-app·apache
yqcoder1 天前
uni-app 之 网络请求
网络·uni-app