使用方法
- 将 JSON 粘贴到输入框中,打开一个 .json 文件,或尝试示例。
- 设置根类型的名称,例如 Order 或 ApiResponse。
- 选择 interface 或 type 声明,以及是否添加 export 和 readonly。
- 复制生成的 TypeScript,或将其下载为 types.ts。
工作原理
该生成器会遍历整个 JSON 文档,并记录每个位置出现的值的类型。每个 JSON 对象都会成为独立的命名声明。名称来自属性的键名,并转换为 PascalCase,例如 “shipping_address” 会变成 ShippingAddress。数组元素的名称会根据键名的单数形式生成:“items” 生成 Item,“categories” 生成 Category;看起来不像是复数形式的键会在后面加上 “Item” 后缀。
同一数组中的所有对象会合并为一个接口。如果某个键只出现在其中部分对象中,则会用 “?” 标记为可选。如果同一个值在不同位置具有不同类型,则类型会写成如 string | number 这样的联合类型。null 会保留为独立类型,因此有时为 null 的字段会变成 string | null。空数组会变成 unknown[],因为其中没有可推断的内容。属性与类型完全相同的两个对象会共用一个接口,而不会生成重复声明。不是合法标识符的键(如 “first-name”)会加上引号。
生成结果仅描述你粘贴的示例。如果实际中某个字段可选或可能为 null,但示例中没有体现,则生成结果会将其视为必填且非 null;日期也会以普通字符串形式出现。在依赖这些类型之前,请对照你的 API 文档检查。
示例
为 API 响应生成类型
从你的商店 API 中粘贴一个订单,并将根名称设置为 Order。你会得到 Order、Customer、Item 和 Shipping 接口,其中 Item 上会有 note?: string,因为两个条目中只有一个包含 note。
只读配置
粘贴 config.json,勾选“将属性设为只读”,然后将结果粘贴到 config.d.ts 中,这样编译器就能捕获对配置的意外写入。
顶层数组
列表接口返回 [{…}, {…}]。将根名称设为 Product 后,输出会以 “export type Product = ProductItem[];” 开头,后面跟着 ProductItem 接口。
常见问题
为什么输出中的字段是可选的?
因为同一数组中至少有一个对象没有该键。如果每个对象都有该键,则会被设为必填。粘贴多条记录可获得更准确的可选字段。
为什么日期类型是字符串?
JSON 没有日期类型,因此日期会以字符串形式传递。该生成器不会猜测格式。如果你的代码会将它们转换为 Date 对象,请自行更改类型。
interface 和 type 有什么区别?
对于对象结构,它们的作用几乎相同。接口可以被扩展并由后续声明合并;类型别名不能重新打开。请选择你的代码库已使用的风格。
它可以生成运行时验证,例如 Zod schema 吗?
不能。它只生成 TypeScript 声明,这些声明在编译时检查,不会在运行时验证数据。
隐私
您的 JSON 只在浏览器中分析。不会上传、存储或纳入分析。