实用工具
输入
结果
结果会显示在这里。手写接口返回值的类型既慢又容易出错:某个字段有时不存在,某个值有时是 null,数组里的对象键并不完全一样。这个工具把 JSON 交给 quicktype——Glide 开源的类型生成器,也是编辑器插件 Paste JSON as Code 背后的引擎——生成可以直接粘进项目的 interface。输入是数组时会逐个比较每个元素:只在部分元素里出现的键会标成可选,有时为 null 的值会生成与 null 的联合类型。
它是怎么工作的
- quicktype-core 在页面里运行,库本身约 1 MB,只在你第一次点运行时才下载。
- 嵌套对象会生成各自命名的 interface,不同位置出现的相同结构会合并成同一个类型。
- 长得像日期的字符串仍然标成 string,因为 JSON.parse 返回的就是字符串,不会是 Date。
- 可以选 interface 还是 type 声明、给所有字段加 readonly,并自定义顶层类型名。
你的数据去了哪里
哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。
本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。
它要花多少
本工具完全免费,不需要登录,也不消耗积分。
常见问题
- 它怎么判断一个字段是可选的?
- 完全依据你给的数据。如果 JSON 是对象数组,某个键在至少一个元素里缺失,它就会带上问号。单个对象提供不了这种证据,所以里面每个键都是必填。想让可选字段准确,就把几份真实响应放进同一个数组再生成。
- 为什么某个字段是 null,而不是 string | null?
- 因为样本里这个字段的值全是 null,quicktype 没有别的依据,不可能知道它有值时是什么类型。示例数据里的 mirror_url 就是这种情况。补一个该字段有值的样本,或者手动把类型放宽。
- interface 和 type 该选哪个?
- 对普通的对象结构来说,两者实际上可以互换。interface 能被继承、能通过重复声明合并,有些库依赖这一点;type 还能表达联合类型和映射类型。多数代码库会统一用一种,这个选项就是为了和你的项目保持一致。
- 生成的类型能在运行时校验数据吗?
- 不能。TypeScript 类型在编译后就消失了,结构不符的响应照样能通过。需要运行时校验的话,用本站的 JSON 转 Zod 工具从同一份 JSON 生成 Zod schema,再用它去 parse 响应。
背后的开源项目
本工具运行在 glideapps/quicktype 之上,以 Apache-2.0 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。
glideapps/quicktype也常被称作
- json转typescript
- json转ts
- json生成typescript类型
- json转interface
- quicktype在线
- 接口返回生成ts类型