tigtools

JSON 转 TypeScript

粘贴 JSON 响应或文件,即可获得可直接放入代码中的 TypeScript 声明。

在浏览器中运行 无需注册

声明为

使用方法

  1. 将 JSON 粘贴到输入框中,打开一个 .json 文件,或尝试示例。
  2. 设置根类型的名称,例如 Order 或 ApiResponse。
  3. 选择 interface 或 type 声明,以及是否添加 export 和 readonly。
  4. 复制生成的 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 只在浏览器中分析。不会上传、存储或纳入分析。