35个稳定版本 (9个主要版本)

9.0.1 2024年6月28日
8.1.0 2024年3月22日
7.1.1 2024年1月19日
7.0.0 2023年8月7日
0.2.3 2020年12月18日

#8 in WebAssembly

Download history 10161/week @ 2024-05-04 11167/week @ 2024-05-11 10449/week @ 2024-05-18 11483/week @ 2024-05-25 12564/week @ 2024-06-01 12377/week @ 2024-06-08 13610/week @ 2024-06-15 15809/week @ 2024-06-22 11904/week @ 2024-06-29 12169/week @ 2024-07-06 12188/week @ 2024-07-13 13588/week @ 2024-07-20 15218/week @ 2024-07-27 14424/week @ 2024-08-03 14824/week @ 2024-08-10 10812/week @ 2024-08-17

每月下载量57,321
69 个crate中使用 (45个直接使用)

MIT 许可

74KB
1K SLoC

ts-rs

logo
ts-rs

从Rust类型生成TypeScript类型声明

为什么?

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

ts-rs在处理WebAssembly时也可能非常有用。

如何?

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

开始使用

[dependencies]
ts-rs = "9.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 兼容性
  • 泛型类型
  • 支持ESM导入

cargo 功能

特性 描述
serde-compat 默认启用
有关更多信息,请参阅下面的 "serde兼容性"部分。
格式 启用生成的TypeScript绑定的格式化。
目前,这不幸地增加了许多依赖关系。
no-serde-warnings 默认情况下,如果在构建过程中遇到不受支持的serde属性,将打印警告。
启用此功能将静音这些警告。
import-esm 当启用时,生成的文件中的 import 语句将具有路径末尾的 .js 扩展名,以符合ES Modules规范。
示例:import { MyStruct } from "./my_struct.js"
serde-json-impl serde_json 中的类型实现 TS
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 中的类型实现 TS
ordered-float-impl ordered_float 中的类型实现 TS
heapless-impl heapless 中的类型实现 TS
semver-impl semver 中的类型实现 TS

如果你处理的是一个未实现 TS 的类型,可以使用 #[ts(as = "..")]#[ts(type = "..")],或者提交一个 PR。

serde 兼容性

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

  • rename
  • rename-all
  • rename-all-fields
  • tag
  • content
  • untagged
  • skip
  • flatten
  • default

注意: skip_serializingskip_deserializing 被忽略。如果你希望排除生成的类型中的字段,但不能使用 #[serde(skip)],则使用 #[ts(skip)] 代替。

当 ts-rs 遇到不支持的 serde 属性时,会发出警告,除非启用特性 no-serde-warnings

贡献

贡献总是受欢迎的!请随时提出问题,使用 GitHub 讨论或提交一个 PR。 查看 CONTRIBUTING.md

MSRV

此 crate 的最低支持 Rust 版本为 1.63.0

许可证:MIT

依赖项

~0.3–14MB
~122K SLoC