8 个版本

0.1.7 2024 年 8 月 9 日
0.1.6 2024 年 8 月 8 日

#1114 in 网页编程

Download history 552/week @ 2024-08-03 64/week @ 2024-08-10

每月 616 次下载

MIT 许可证

8KB
50

TsBind How it works

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