Project Icon

tygo

从Golang源文件生成Typescript类型,保留注释并支持常量

Tygo是一个用来将Golang源文件转化为Typescript类型的工具,能够自动保留注释,识别常量,并支持非结构体类型表达。适用于基于Golang REST API的前端代码,全面支持Golang 1.18的泛型和结构体继承。用户可以通过CLI或库模式进行配置和使用,轻松完成类型转换。

tygo 项目介绍

项目概述

tygo 是一款工具,用于从 Golang(也是我们所熟知的 Go语言)源文件生成 Typescript 类型定义。这个工具运作流畅,只需简单操作便可实现类型定义的自动转换。它保留了注释信息,能够理解常量,并支持非结构体的 type 表达式。因此,tygo 是生成 Golang REST API 对应类型以在前端代码中使用的理想选择。值得一提的是,它支持 Golang 1.18 版本的泛型以及结构体继承。

安装

在命令行中执行以下命令即可安装 tygo:

go install github.com/gzuidhof/tygo@latest

使用示例

假设有一个 Golang 输入文件,其内容如下:

type UserRole = string
const (
    UserRoleDefault UserRole = "viewer"
    UserRoleEditor  UserRole = "editor"
)

type UserEntry struct {
    ID uuid.NullUUID `json:"id" tstype:"string | null"`
    Preferences map[string]struct {
        Foo uint32 `json:"foo"`
        Bar uuid.UUID `json:"bar"`
    } `json:"prefs"`
    Nickname string `json:"nickname,omitempty"`
    Role UserRole `json:"role"`
    unexported bool
}

通过 tygo 转换后,生成的 Typescript 输出如下:

export type UserRole = string;
export const UserRoleDefault: UserRole = "viewer";
export const UserRoleEditor: UserRole = "editor";

export interface UserEntry {
  id: string | null;
  prefs: {
    [key: string]: {
      foo: number;
      bar: any;
    };
  };
  nickname?: string;
  role: UserRole;
}

用法

选项A:命令行接口使用(推荐)

用户需要创建一个 tygo.yaml 文件,该文件用于指定待转换的包以及可能需要添加的特殊类型映射。然后,通过运行以下命令生成 Typescript 定义:

tygo generate

生成的 Typescript 文件会被放在 Go 源文件相同的目录中。

选项B:库模式使用

用户可以在 Go 代码中配置 tygo.Config,并调用 Generate 方法生成 Typescript 类型。

配置文件示例

packages:
  - path: "github.com/my/package"
    output_path: "webapp/api/types.ts"
    indent: "    "
    type_mappings:
      time.Time: "string"
      my.Type: "SomeType"
    frontmatter: |
      "import {SomeType} from "../lib/sometype.ts"
    exclude_files:
      - "private_stuff.go"
    extends: "SomeType"

类型提示及自定义映射

用户可以通过在结构体字段中使用 tstype 标签来指定其输出到 Typescript 文件中的类型。此外,还可以使用 tygo:emit 指令为无法直接用 Go 表示的类型生成对应的 Typescript 代码。

支持的特性

tygo 支持多种特性,包括字段的必需性和只读性、接口的继承、以及泛型等。用户可以通过 tstype 标签对指针类型字段进行标记以保证它们的必需性,或将字段设置为不可变,标记为只读字段等。

相关项目

tygo 项目与其他同类项目不同,它不依赖反射,因此能更好地保留代码中的注释和细节信息。其他类似项目如 typescriptify-golang-structsgo2ts 也各有优缺点,适合不同的使用场景。

许可证

tygo 项目采用 MIT 协议,用户可以自由使用和分发这个工具。

通过简单的配置和命令行操作,tygo 能够大大提高 Go 项目与 Typescript 项目间的数据交互效率,是开发人员的极佳辅助工具。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号