4 个稳定版本
7.0.3 | 2023年11月9日 |
---|---|
7.0.1 | 2023年9月4日 |
7.0.0 | 2023年8月29日 |
#91 in WebAssembly
3,209 每月下载次数
42KB
651 行
ts-rs
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实现
TS
为IndexMap
和IndexSet
-
ordered-float-impl
从ordered_float实现
TS
为OrderedFloat
-
heapless-impl
从heapless实现
TS
为Vec
如果处理的数据类型没有实现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