介绍
在开发 Tauri 应用的使用,在服务层定义的 rust struct
往往需要在前端再通过 typescript 再定义一次。
可以使用 tauri-specta
通过在编译时,自动生成 typescript 类型和函数,来解决这个问题。
使用
安装
在 Cargo.toml
中添加依赖
cargo add specta@=2.0.0-rc.5
cargo add tauri-specta@=2.0.0-rc.2 --features javascript,typescript
详情可以见 文档
问题
1. NaiveDateTime 无法转换
specta 实现了对 chrono 的支持,但是需要再 features 中开启,详情请见 文档
an Err
value: BigIntForbidden (usize)
因为 Javascript 的最大安全整数是 2^53 - 1,所以 u64 /i64 在转换时,如果超过这个范围,会报错。
specta
支持了 pub struct ExportConfiguration { /* private fields */ }
所以在 tauri 的 main.rs
里可以添加如下代码:
let config = specta::ts::ExportConfig::new ().bigint (BigIntExportBehavior::Number);
let specta_builder = tauri_specta::ts::builder ()
.config (config)
.commands (tauri_specta::collect_commands![...some command]);
备选方案
rspc 是一个类型安全路由器,它允许在 Rust 中构建具有端到端类型安全的 API。您可以在后端的 Rust 函数中定义逻辑,并使用 React hooks 或 Typescript 客户端来调用它。其内置了对 Tauri 的支持。其作者和 specta 是同一人。 文档在这里