8 个版本
0.1.7 | 2024 年 8 月 9 日 |
---|---|
0.1.6 | 2024 年 8 月 8 日 |
#1114 in 网页编程
每月 616 次下载
8KB
50 行
TsBind
一个用于从结构体生成 TypeScript 绑定的 Rust 库。
安装
cargo add ts-bind
用法
将以下内容添加到您的 Rust 代码中
use ts_bind::TsBind;
#[derive(TsBind)]
struct MyStruct {
field1: String,
field2: i32,
}
这将生成相应的 TypeScript 接口,保存在 bindings
目录下。
// bindings/MyStruct.ts
export interface MyStruct {
field1: string;
field2: number;
}
功能
重命名结构体
您可以通过添加 #[ts_bind(rename = "新名称")]
属性来重命名生成的接口。
#[derive(TsBind)]
#[ts_bind(rename = "NewName")]
struct MyStruct {
field1: String,
field2: i32,
}
// bindings/NewName.ts
export interface NewName {
field1: string;
field2: number;
}
按大小写重命名所有字段
您可以通过添加 #[ts_bind(rename_all = "...")]
属性来按大小写重命名所有字段。
#[derive(TsBind)]
#[ts_bind(rename_all = "camelCase")]
struct MyStruct {
field_one: String,
field_two: i32,
}
// bindings/MyStruct.ts
export interface MyStruct {
fieldOne: string;
fieldTwo: number;
}
自定义导出路径
您可以通过添加 #[ts_bind(export = "path/to/export")]
属性来指定自定义的导出路径。
#[derive(TsBind)]
#[ts_bind(export = "models")]
struct MyStruct {
field1: String,
field2: i32,
}
// models/MyStruct.ts
export interface MyStruct {
field1: string;
field2: number;
}
自动导入
未知类型将自动导入到输出的 TypeScript 文件中。
#[derive(TsBind)]
struct User {
id: i32,
posts: Vec<Post>,
}
#[derive(TsBind)]
struct Post {
title: String,
}
// bindings/User.ts
import { Post } from "./Post"; // automatically imported
export interface User {
id: number;
posts: Post[];
}
// bindings/Post.ts
export interface Post {
title: string;
}
跳过字段
您可以通过添加 #[ts_bind(skip)]
属性来跳过字段。
#[derive(TsBind)]
struct User {
id: i32,
#[ts_bind(skip)]
password: String,
}
export interface User {
id: number;
}
结构级别属性
ts_bind
属性支持以下整个结构体的可选参数
参数 | 描述 |
---|---|
rename |
重命名生成的接口。 |
rename_all |
按大小写重命名所有字段。 |
export |
自定义导出路径。 |
字段级别属性
ts_bind
属性支持以下单个字段的可选参数
参数 | 描述 |
---|---|
rename |
重命名字段。 |
skip |
跳过字段。 |
#[derive(TsBind)]
struct User {
id: i32,
#[ts_bind(rename = "postCount")]
post_count: i32,
}
export interface User {
id: number;
postCount: number;
}
待办事项
该库远未完成。以下是计划中的部分功能
-
#[ts_bind(export = "path/to/export")]
自定义导出路径。 -
#[ts_bind(rename_all = "camelCase")]
属性来重命名所有字段。 -
#[ts_bind(skip)]
属性来跳过字段。 - 枚举支持。
-
#[ts_bind(skip_if = "condition")]
属性根据条件跳过字段。
贡献
请随意在我们的 GitHub 仓库 上提交问题或拉取请求。
许可证
该项目受 MIT 许可证许可。有关详细信息,请参阅 LICENSE 文件。
依赖关系
~1–1.5MB
~28K SLoC