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泛型来返回。

相关推荐
时光足迹11 小时前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹12 小时前
腾讯云 TRTC UniApp SDK 从入门到上线
前端·vue.js·uni-app
时光足迹12 小时前
uni-app 里把加密视频嵌入页面播放?我分析了 4 种方案,只有 1 种接近完美
前端·vue.js·uni-app
时光足迹13 小时前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹13 小时前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹13 小时前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
spmcor3 天前
身份证读卡“无感登录”方案实践:从手动点击到自动检测
uni-app
PedroQue993 天前
uni-router v1.8.0新增冷启动守卫补执行
前端·uni-app
PedroQue994 天前
uni-router v1.7.0重磅更新:守卫重定向自由掌控
前端·uni-app
一份执念5 天前
uni-app项目 (vue+vite + uni-UI)中引入umd格式JS文件,微信小程序中导入报错处理方案
前端·uni-app·echarts