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
每月下载量57,321
在 69 个crate中使用 (45个直接使用)
74KB
1K SLoC
ts-rs
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 属性
renamerename-allrename-all-fieldstagcontentuntaggedskipflattendefault
注意: skip_serializing 和 skip_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