4 个稳定版本

7.0.3 2023年11月9日
7.0.1 2023年9月4日
7.0.0 2023年8月29日

#91 in WebAssembly

Download history 16/week @ 2024-03-31 45/week @ 2024-04-14 1/week @ 2024-04-21

3,209 每月下载次数

MIT 许可证

42KB
651

ts-rs

logo
ts-rs

从Rust结构体生成TypeScript接口/类型声明

为什么?

当在Rust中构建Web应用程序时,数据结构需要在后端和前端之间共享。使用此库,您可以轻松地为您自己的Rust结构体和枚举生成TypeScript绑定,以便您可以将类型保存在一个地方。

当与WebAssembly一起工作时,ts-rs也可能很有用。

如何?

ts-rs公开了一个单独的trait,TS。使用derive宏,您可以为您自己的类型实现此接口。然后,您可以使用此trait来获取TypeScript绑定。我们建议在您的测试中这样做。 查看示例文档

开始使用

[dependencies]
ts-rs = "7.0"
use ts_rs::TS;

#[derive(TS)]
#[ts(export)]
struct User {
    user_id: i32,
    first_name: String,
    last_name: String,
}

当运行 cargo test 时,TypeScript绑定将被导出到文件 bindings/User.ts

特性

  • 从Rust结构体生成接口声明
  • 从Rust枚举生成联合声明
  • 内联类型
  • 扁平化结构体/接口
  • 导出到多个文件时生成必要的导入
  • serde兼容性
  • 泛型类型

限制

  • 泛型字段不能内联或扁平化 (#56)
  • 类型别名不得引用泛型类型 (#70)

cargo功能

  • serde-compat (默认)

    启用serde兼容性。更多信息请见下文。

  • 格式化

    启用时,生成的TypeScript将被格式化。目前,这不幸地增加了许多依赖项。

  • chrono-impl

    为chrono类型实现TS

  • bigdecimal-impl

    为bigdecimal类型实现TS

  • url-impl

    为url类型实现TS

  • uuid-impl

    为uuid类型实现TS

  • bson-uuid-impl

    为bson类型实现TS

  • bytes-impl

    为bytes类型实现TS

  • indexmap-impl

    从indexmap实现TSIndexMapIndexSet

  • ordered-float-impl

    从ordered_float实现TSOrderedFloat

  • heapless-impl

    从heapless实现TSVec

如果处理的数据类型没有实现TS,请使用#[ts(type = "..")]或提交一个PR。

serde 兼容性

使用serde-compat特性(默认启用),serde属性可以对枚举和结构体进行解析。支持的serde属性

  • rename
  • rename-all
  • tag
  • content
  • untagged
  • skip
  • skip_serializing
  • skip_deserializing
  • skip_serializing_if= "Option::is_none"
  • flatten
  • default

当ts-rs遇到不支持的serde属性时,会发出警告。

contributing

欢迎贡献!请随意提交问题、使用GitHub讨论或提交PR。 见CONTRIBUTING.md

todo

  • serde 兼容层
  • 文档
  • 在文件间使用typescript类型
  • 更多枚举表示
  • 泛型
  • 不需要'static

许可:MIT

依赖

~0.5–12MB
~129K SLoC