#macro #github #typescript #type #synchronization #tsync #com-wulf-tsync

macro tsync-macro

tsync宏(参见 https://github.com/Wulf/tsync)

1 个不稳定版本

0.1.0 2022年11月6日

#96#synchronization

Download history 102/week @ 2024-03-13 106/week @ 2024-03-20 155/week @ 2024-03-27 139/week @ 2024-04-03 137/week @ 2024-04-10 101/week @ 2024-04-17 120/week @ 2024-04-24 210/week @ 2024-05-01 172/week @ 2024-05-08 151/week @ 2024-05-15 163/week @ 2024-05-22 129/week @ 2024-05-29 112/week @ 2024-06-05 102/week @ 2024-06-12 105/week @ 2024-06-19 66/week @ 2024-06-26

每月 401 次下载
2 个crate中(通过 tsync)使用

MIT/Apache

5KB

tsync

License: MIT OR Apache-2.0

一个从Rust代码生成TypeScript类型的实用工具。

安装

它包含两部分

  1. 命令行工具

    cargo install tsync
    
  2. Rust项目的依赖项(使用 #[tsync] 属性;详见下文使用说明)

    /// Cargo.toml
    
    tsync = "X.Y.Z"
    

使用方法

以下示例展示了如何标记结构体使用 #[tsync]

/// src/main.rs
use tsync::tsync;

/// Doc comments are preserved too!
#[tsync]
struct Book {
  name: String,
  chapters: Vec<Chapter>,
  user_reviews: Option<Vec<String>>
}

#[tsync]
struct Chapter {
  title: String,
  pages: u32
}


#[tsync]
/// Time in UTC seconds
type UTC = usize;

然后使用命令行工具

tsync -i ./src -o types.d.ts

搞定!

/// types.d.ts

/* This file is generated and managed by tsync */

// Doc comments are preserved too!
interface Book {
  name: string
  chapters: Array<Chapter>
  user_reviews: Array<string> | undefined
}

interface Chapter {
  title: string
  pages: number
}

// Time in UTC seconds
type UTC = number

多个输入

您可以使用 -i 标志多次指定多个输入(目录和/或文件),如下所示

tsync -i directory1 -i directory2 -o types.d.ts

多个输出

为您的项目创建多个类型文件可能有所帮助。这很简单,只需多次调用tsync即可

tsync -i src/models -o models.d.ts
tsync -i src/api -o api.d.ts

作为库使用

如果全局安装 tsync 不是一个选择(或会引起其他问题),则可以将其作为库使用。

  1. 将库添加到您的项目中

    cargo add tsync@1
    
  2. 在您的项目中创建一个新的二进制文件,该文件使用该crate(例如,bin/tsync.rs

    // bin/tsync.rs
    
    use std::path::PathBuf;
    
    pub fn main() {
    let dir = env!("CARGO_MANIFEST_DIR");
    
        let inputs = vec![PathBuf::from_iter([dir, "backend"])];
        let output = PathBuf::from_iter([dir, "frontend/src/types/rust.d.ts"]);
    
        tsync::generate_typescript_defs(inputs, output, false);
    }
    
  3. Cargo.toml 中创建一个新的二进制条目

    [[bin]]
    name = "tsync"
    path = "bin/tsync.rs"
    
  4. 执行!

    cargo run --bin tsync
    

小贴士:要使用 cargo tsync,在 .cargo/config 中创建别名

[alias]
tsync="run --bin tsync"

错误

在执行 tsync 后,会列出无法成功打开或解析的文件列表。对于其他错误,请尝试使用 --debug 标志来定位问题。请使用GitHub问题跟踪器报告任何问题。

文档

有关更多信息,请参阅 tsync --help

请随意提出支持或功能请求的票证。

开发和测试

使用./test/test_all.sh来运行测试。运行测试后,./test中的文件不应有任何意外的更改(使用git statusgit diff查看是否有更改)。

许可证

本工具根据MIT许可证和Apache许可证(版本2.0)的条款分发。

有关详细信息,请参阅LICENSE-APACHE、LICENSE-MIT和COPYRIGHT。

无运行时依赖