#generate-typescript #typescript #type #generation #macro

bin+lib tsync

从 Rust 代码生成 TypeScript 类型

22 个稳定版本

2.2.1 2024 年 6 月 12 日
2.1.0 2024 年 1 月 4 日
2.0.1 2023 年 9 月 29 日
1.7.0 2023 年 3 月 30 日
1.0.1 2020 年 11 月 22 日

#148Web 编程

Download history 126/week @ 2024-04-27 126/week @ 2024-05-04 199/week @ 2024-05-11 128/week @ 2024-05-18 133/week @ 2024-05-25 107/week @ 2024-06-01 142/week @ 2024-06-08 103/week @ 2024-06-15 57/week @ 2024-06-22 24/week @ 2024-06-29 54/week @ 2024-07-06 28/week @ 2024-07-13 10/week @ 2024-07-20 122/week @ 2024-07-27 28/week @ 2024-08-03 37/week @ 2024-08-10

每月 200 次下载
create-rust-app 中使用

MIT/Apache 许可证

69KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments TypeScript 253 SLoC // 0.4% comments Shell 45 SLoC // 0.2% comments

tsync

License: MIT OR Apache-2.0

从 Rust 代码生成 TypeScript 类型的实用工具。尽量符合 serde 的序列化输出。

安装

该工具包含两个部分

  1. CLI 工具(或参见“作为库的使用”)

    cargo install tsync
    
  2. Rust 项目的依赖项(使用 #[tsync] 属性;下面是使用方法)

    cargo add tsync@1
    

使用方法

使用以下方法标记结构体为 #[tsync]

/// src/main.rs
use tsync::tsync;

/// Doc comments are preserved too!
#[tsync]
struct Book {
  name: String,
  chapters: Vec<Chapter>,
  user_reviews: Option<Vec<String>>
}

#[tsync]
struct Chapter {
  title: String,
  pages: u32
}


#[tsync]
/// Time in UTC seconds
type UTC = usize;

然后使用 CLI 工具

tsync -i ./src -o types.d.ts

就这样!

/// types.d.ts

/* This file is generated and managed by tsync */

// Doc comments are preserved too!
interface Book {
  name: string
  chapters: Array<Chapter>
  user_reviews?: Array<string>
}

interface Chapter {
  title: string
  pages: number
}

// Time in UTC seconds
type UTC = number

支持的转换及示例

带有 #[tsync] 的 Rust 代码 Typescript 输出
结构体 .d.ts 文件 或 .ts 文件
类型 .d.ts 文件 或 .ts 文件
枚举 .d.ts 文件.ts 文件
const(或有限的 json! 支持) .ts 文件
注意:如果您为输出指定了 .d.ts 扩展名,则 rust const#[tsync] 将被忽略

多个输入

您可以使用 -i 标志多次指定多个输入(目录和/或文件),如下所示

tsync -i directory1 -i directory2 -o types.d.ts

多个输出

为您的项目创建多个类型文件可能会有所帮助。这很简单,只需多次调用 tsync 即可

tsync -i src/models -o models.d.ts
tsync -i src/api -o api.d.ts

作为库使用

如果您不打算全局安装 tsync(或者会导致其他问题),则可以使用它作为库。

  1. 将库添加到您的项目中

    cargo add tsync@1
    
  2. 在您的项目中创建一个新的二进制文件,该文件使用 crate(例如,bin/tsync.rs

    // bin/tsync.rs
    
    use std::path::PathBuf;
    
    pub fn main() {
    let dir = env!("CARGO_MANIFEST_DIR");
    
        let inputs = vec![PathBuf::from_iter([dir, "backend"])];
        let output = PathBuf::from_iter([dir, "frontend/src/types/rust.d.ts"]);
    
        tsync::generate_typescript_defs(inputs, output, false);
    }
    
  3. Cargo.toml 中创建二进制条目

    [[bin]]
    name = "tsync"
    path = "bin/tsync.rs"
    
  4. 执行!

    cargo run --bin tsync
    

提示:要使用 cargo tsync,请在 .cargo/config 中创建别名

[alias]
tsync="run --bin tsync"

错误

在执行 tsync 后,将列出无法成功打开或解析的文件列表。对于其他错误,请尝试使用 --debug 标志来定位问题。请使用 GitHub 问题跟踪器报告任何问题。

文档

有关更多信息,请参阅 tsync --help

请随时提交支持或功能请求的票证。

开发和测试

使用 ./test/test_all.sh 运行测试。在运行测试后,./test 中的文件应没有意外的更改(使用 git statusgit diff 查看是否有更改)。

许可

此工具根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款进行分发。

有关详细信息,请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT。

依赖项

~2–31MB
~403K SLoC