JSON 转 TypeScript 类型生成器

举报
yd_280683556 发表于 2026/09/16 23:06:54 2026/09/16
【摘要】 作品简介:粘贴 JSON 自动生成 TypeScript 接口,数组合并与嵌套提取JSON 转 TypeScript 类型生成器(JSON to TS)把 JSON 数据一键转换为 TypeScript 接口/类型定义的网页工具。纯 HTML/CSS/JavaScript 单文件实现,零依赖、零后端,所有转换在浏览器本地完成,数据不出本机。功能特性类型推断:字符串 → string,数字 →...
JSON 转 TypeScript 类型生成器 preview

JSON 转 TypeScript 类型生成器(JSON to TS)

把 JSON 数据一键转换为 TypeScript 接口/类型定义的网页工具。纯 HTML/CSS/JavaScript 单文件实现,零依赖、零后端,所有转换在浏览器本地完成,数据不出本机。

功能特性

  • 类型推断:字符串 → string,数字 → number,布尔 → boolean,null → null,空数组 → unknown[]
  • 数组处理:同类型元素生成 T[];混合类型生成联合 (A | B)[];对象数组自动合并所有元素字段为一个接口
  • 可选字段:对象数组内并非每个元素都出现的字段自动标记为 field?
  • 嵌套对象提取:嵌套对象提取为独立接口,命名为「父类型名 + 字段名」,根对象使用自定义根类型名
  • 命名清洗:含特殊字符的键名自动加引号;嵌套接口名清洗为合法标识符
  • 可配置:根类型名、interface / type 声明方式、分号或逗号分隔符、export 前缀开关
  • 即时输出:输入 JSON 即实时生成,支持一键复制与下载 .ts 文件

命名规则

JSON 结构 生成结果
{ "a": 1 }(根对象) interface Root { a: number; }
{ "profile": { "age": 36 } } interface RootProfile { age: number; }
[{ "a": 1 }](对象数组) interface RootItem { a: number; } + type Root = RootItem[];
[1, "a"](混合数组) `type Root = (number
{ "foo-bar": 1 } "foo-bar": number;

工作原理

JSON 文本 → JSON.parse 校验
  → 递归 build(value, name)
      原始类型 → string / number / boolean / null
      数组     → 元素类型去重合并;对象数组则合并字段为 <name>Item 接口
      对象     → 逐字段递归,注册为 <name> 接口,返回接口名
  → 接口去重并按「根在前」排序
  → 依选项渲染 interface / type 文本

使用场景

  • 接口联调:拿到后端返回的 JSON 样例,快速生成前端类型定义
  • 类型补全:为历史项目的裸 JSON 数据补上 TypeScript 类型
  • 代码审查辅助:直观查看数据结构中的可选字段与联合类型
  • 离线使用:无需安装任何依赖,浏览器打开即用

快速开始

无需安装与构建,直接用浏览器打开 index.html 即可使用,或在任意静态服务器下访问:

python3 -m http.server 8029
# 访问 http://localhost:8029/index.html

技术栈

  • HTML5 + CSS3 + 原生 JavaScript(零第三方依赖)
  • 递归类型推断:typeof / Array.isArray / Object.keys
  • 剪贴板与 Blob 下载
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。