3.6 KiB
3.6 KiB
MsgDataServiceReal 类型转换升级总结
修改概述
已成功将 msgDataServiceReal.uts 中的所有 Supabase 查询从 .execute() 升级为 .executeAs<T>() 方式,实现了完整的类型安全。
主要修改内容
1. 查询方法升级
| 方法 | 原始方式 | 新方式 | 返回类型 |
|---|---|---|---|
getMessageTypes() |
.execute() |
.executeAs<Array<MessageType>>() |
Array<MessageType> |
getMessages() |
.execute() |
.executeAs<Array<Message>>() |
Array<Message> |
getMessageById() |
.execute() |
.executeAs<Message>() |
Message |
sendMessage() |
.execute() |
.executeAs<Message>() |
Message |
markAsRead() |
.execute() |
.executeAs<Array<MessageRecipient>>() |
boolean |
deleteMessage() |
.execute() |
.executeAs<Array<Message>>() |
boolean |
batchOperation() |
.execute() |
.executeAs<Array<MessageRecipient>>() |
boolean |
getMessageStats() |
.execute() |
.executeAs<Array<MessageRecipient>>() |
MessageStats |
searchUsers() |
.execute() |
.executeAs<Array<UserOption>>() |
Array<UserOption> |
getGroups() |
.execute() |
.executeAs<Array<MessageGroup>>() |
Array<MessageGroup> |
getGroupMembers() |
.execute() |
.executeAs<Array<GroupMember>>() |
Array<GroupMember> |
2. 代码简化
移除的旧代码:
handleResponse<T>()私有方法transformResponse<T, U>()转换函数convertToMessageTypes()转换函数convertToMessages()转换函数- 手动的
UTSJSONObject数据转换逻辑
保留的工具函数:
createErrorResponse<T>()- 用于创建标准错误响应
3. 错误处理改进
所有错误处理都统一使用 new UniError() 构造函数,确保类型一致性。
4. 类型定义补充
添加了 GroupMember 类型定义,确保所有使用的类型都有明确定义。
优势
🚀 性能提升
- 在 Android 平台使用
UTSJSONObject.parse<T>()进行真正的类型转换 - 减少了手动类型转换的开销
- 简化了代码逻辑
🛡️ 类型安全
- 编译时类型检查
- 智能代码提示
- 运行时类型转换(Android 平台)
🧹 代码简化
- 移除了大量的手动转换代码
- 统一了响应处理逻辑
- 提高了代码可维护性
平台兼容性
| 平台 | 支持方式 | 说明 |
|---|---|---|
| Android | UTSJSONObject.parse<T>() |
真正的类型转换,最佳性能 |
| iOS | as T |
类型断言,编译时检查 |
| Web | as T |
类型断言,编译时检查 |
| HarmonyOS | UTSJSONObject.parse<T>() |
真正的类型转换 |
使用示例
// 之前的方式
const response = await supa.from('ak_messages').select('*').execute();
const messages = convertToMessages(response.data); // 需要手动转换
// 现在的方式
const response = await supa.from('ak_messages')
.select('*')
.executeAs<Array<Message>>(); // 自动类型转换
const messages = response.data; // 直接使用,有完整类型提示
注意事项
- 向后兼容:原有的
.execute()方法仍然可用,不影响其他代码 - 错误处理:所有错误都会正确地 fallback 到原始数据
- 空值处理:保持了原有的空值检查逻辑
- 测试建议:建议在各个平台上进行充分测试
总结
这次升级成功地将 MsgDataServiceReal 类迁移到了新的类型化查询方式,在保持功能完整性的同时,大幅提升了类型安全性和开发体验。代码变得更加简洁、易维护,同时在 Android 和 HarmonyOS 平台上获得了真正的类型转换支持。