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 属性
rename
rename-all
rename-all-fields
tag
content
untagged
skip
flatten
default
注意: 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