介绍

在开发 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 是同一人。 文档在这里

有用的链接

关于 Tauri 自动生成 ts 代码的讨论