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