JSON 转 TypeScript 指南:粘贴 JSON 快速生成 interface
JSON 转 TypeScript 怎么做?本文介绍用在线工具从 JSON 推断 interface 与 type 的方法,覆盖嵌套对象、数组与空值处理,以及生成后需要人工校对的关键点。
写完接口联调的代码,常常要为一长段 JSON 手写 TypeScript 类型:字段十几个、嵌套三四层,手打一遍又慢又容易抄错。把 JSON 粘进工具直接生成 interface 草稿,是最省事的做法。这篇文章讲清楚 JSON 转 TypeScript 的原理与边界,并用在线工具演示完整流程。
转换是怎么工作的
工具做的事情其实很简单:解析 JSON、推断每个字段的类型、输出 TypeScript 声明。它不猜业务含义,只按结构生成草稿:
| JSON 值 | 生成结果 |
|---|---|
| 字符串 | string |
| 数字 | number |
| 布尔值 | boolean |
| 对象 | 拆分为独立 interface |
| 空数组 | unknown[],需要补充具体类型 |
| 结构不同的数组 | 生成后需人工补充联合类型 |
三步生成 TypeScript 类型
- 打开 转换工具,粘贴一个 JSON 对象或数组
- 设置根类型名(默认 Root),点「生成类型」
- 复制结果,结合实际接口数据人工校对
嵌套对象会拆成多个独立 interface;数组作为根类型时输出 type 别名。整个过程在浏览器本地完成,JSON 不会上传。
生成后必须人工校对的地方
工具擅长起稿,不擅长猜业务规则。生成之后重点检查三处:
- 可选字段:工具不知道哪个字段可能缺失,
null和可选字段要自己补? - 联合类型:同一数组里结构不同的对象,需要手动补充 union
- 字段语义:
number可能是 id、时间戳或金额,类型正确不代表含义正确
一段 JSON 的生成结果大致长这样(实际命名以工具输出为准):
{"id": 1, "name": "Ada", "active": true, "profile": {"city": "Shanghai"}}
interface Root { id: number; name: string; active: boolean; profile: Profile; }
interface Profile { city: string; }
数组和嵌套的实际例子
工具对数组的处理值得单独看。比如接口返回一个用户列表:
[{"id": 1, "name": "Ada"}, {"id": 2, "name": "Lin", "role": "admin"}]
数组作为根类型会输出 type 别名,元素推断为对象;当两个元素结构不一致(第二个多了 role)时,工具按首个元素生成,你需要把 role 补成可选字段或联合类型。这是在线转换器最常见的校对点,也是它和手写类型的主要差别:生成结果永远是草稿,业务规则要靠人补。
谁适合用这个转换器
- 前端对接新接口时快速起稿,再人工细化
- 后端返回结构复杂,手写容易漏字段、写错层级
- 和校验配合使用:先用 JSON 格式化工具 确认 JSON 合法、结构清晰,再生成类型
常见问题
会处理嵌套对象吗?
会。嵌套对象会拆分为独立 interface,方便复用。
空数组会生成什么?
unknown[]。工具没有上下文推断元素类型,需要根据实际数据补充。
生成结果可以直接用吗?
建议先校对。可选字段、联合类型和字段语义这三处最值得检查。
数组根类型会生成什么?
type 别名。元素结构不一致时按首个元素推断,其余字段需要人工补充。
和手写类型比,转换工具有什么劣势?
不擅长可选字段、泛型和精细联合类型;优势是快、不容易漏字段。两者结合最稳:工具起稿,人工校对。
数据会上传吗?
不会。处理在浏览器本地完成。
小结
这个转换器解决的是起稿问题:把重复手写类型的时间省下来,把精力留给校对。这个工具在美国开发者中的搜索兴趣过去一年在持续上升,2026 年 5 月到达峰值(Google Trends 数据)。配合 接口 JSON 排查流程 一起用,日常联调能省不少事。