uni-app uts 能否增加 type自定义类型 和UTSJSONObject 可以互相转换

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app uts 能否增加 type自定义类型 和UTSJSONObject 可以互相转换

uts 能否增加 type自定义类型 和UTSJSONObject 可以互相转换!或者现在uts 中有 type自定义类型 和UTSJSONObject 互相转换的方法吗?

7 回复

type User = {
name:string,
age:number
}

let jsonObj = {
name:“张三”,
age:12
}
// UTSJSONObject => 自定义type
let userA = JSON.parse<User>(jsonObj.toJSONString())
console.log(userA!.name)
// 自定义type => UTSJSONObject
let utsJsonA = JSON.parseObject(JSON.stringify(userA))
console.log(utsJsonA)

文档已更新 https://doc.dcloud.net.cn/uni-app-x/uts/buildin-object-api/utsjsonobject.html


type b = { name : string; success ?: (res : any) => void; fail ?: (res : any) => void; complete ?: (res : any) => void; }

代码这样子运行 utsJsonA 结果是

{complete: null, fail: null, name: “添加账户”, success: null}

为啥 complete、fail、success都是空的呀

有没有办法不把function序列化成null!!

uni-app 中,UTS(Uni-app TypeScript Support)是为了更好地支持 TypeScript 而开发的工具集。虽然 uni-app 原生对自定义类型(type alias)和对象之间的互转有较好的支持,但要实现 type 自定义类型和 UTSJSONObject(假设这是一个自定义的 JSON 对象类型)之间的互相转换,还是需要通过一些 TypeScript 的高级特性和代码实现。

首先,定义一个自定义类型 MyCustomType 和一个 UTSJSONObject 类型:

// 自定义类型
type MyCustomType = {
    name: string;
    age: number;
    hobbies: string[];
};

// UTSJSONObject 假设为一个通用的 JSON 对象类型
interface UTSJSONObject {
    [key: string]: any;
}

然后,实现这两个类型之间的转换函数。由于 TypeScript 类型在运行时会被擦除,所以转换逻辑需要手动编写:

// 将 MyCustomType 转换为 UTSJSONObject
function toUTSJSONObject(obj: MyCustomType): UTSJSONObject {
    return {
        ...obj
    } as UTSJSONObject;
}

// 将 UTSJSONObject 转换为 MyCustomType
function fromUTSJSONObject(json: UTSJSONObject): MyCustomType {
    return {
        name: json.name as string,
        age: json.age as number,
        hobbies: (json.hobbies as string[]) || []
    } as MyCustomType;
}

// 示例使用
const customObj: MyCustomType = {
    name: "John Doe",
    age: 30,
    hobbies: ["reading", "coding"]
};

const jsonObj: UTSJSONObject = toUTSJSONObject(customObj);
console.log(jsonObj); // { name: 'John Doe', age: 30, hobbies: [ 'reading', 'coding' ] }

const convertedBack: MyCustomType = fromUTSJSONObject(jsonObj);
console.log(convertedBack); // { name: 'John Doe', age: 30, hobbies: [ 'reading', 'coding' ] }

在上述代码中:

  1. toUTSJSONObject 函数将 MyCustomType 类型的对象转换为 UTSJSONObject 类型。
  2. fromUTSJSONObject 函数将 UTSJSONObject 类型的对象转换为 MyCustomType 类型,并在必要时进行类型断言和默认值处理。

注意,这种转换依赖于运行时数据的完整性和准确性。如果 UTSJSONObject 中缺少 MyCustomType 所需的字段,或者字段类型不匹配,可能会导致运行时错误。因此,在实际应用中,可能需要添加更多的错误处理和验证逻辑。

回到顶部