nicetool.dev logo

JSON 转 TypeScript

粘贴 API 响应或 JSON 对象,类型会随输入实时更新。

JSON
生成的代码
export interface User {
  id: number;
  name: string;
  email: string;
  score: number;
  active: boolean;
  tags: string[];
  address: Address;
  orders: Order[];
}

export interface Address {
  city: string;
  postcode: null;
}

export interface Order {
  id: number;
  total: number;
  paidAt?: string;
  coupon?: string;
}

为什么要从 JSON 生成类型?

API、配置文件和 Webhook 都返回 JSON,但 TypeScript、Go 和运行时校验库需要明确的结构。为一个大型响应手写接口既慢又容易出错:时有时无的字段、偶尔为 null 的数字、嵌套的对象数组都很容易写错。本工具读取真实示例并为你推断结构。对象数组会被合并,只在部分元素中出现的键变为可选,有时为 null 的键变为可为空,每个嵌套对象都会得到自己的类型名。

功能

  • • TypeScript 接口或类型别名,支持可选(?)字段
  • • Go 结构体,带 json 标签、omitempty 和符合 Go 习惯的命名(ID、URL)
  • • Zod schema 及推断出的 TypeScript 类型,按引用顺序排列
  • • 合并对象数组,识别 null、混合类型和整数
  • • 对 "first-name" 这类非法标识符的键自动加引号

数据保持私密

解析和代码生成都在浏览器中完成,包含真实客户数据的 API 响应不会离开你的电脑。

不上传,可离线使用。

JSON 转 TypeScript使用方法

  1. 1

    粘贴一段 JSON 示例,例如从浏览器 Network 面板、Postman 或 curl 复制的响应。数组元素越多,可选字段识别得越准确。

  2. 2

    选择输出:TypeScript 接口、Go 结构体或 Zod schema。TypeScript 还可以切换为 type 别名。

  3. 3

    设置根类型名,如 User 或 OrderResponse。嵌套对象按键名命名,数组元素使用单数形式(orders 变为 Order)。

  4. 4

    检查结果,修正示例无法体现的内容(比如实际是日期或枚举的字符串),然后复制到代码中。

实际应用示例

为 REST API 响应定义类型

粘贴 GET /api/users/42 返回的 JSON,得到带嵌套 Address 类型的 User 接口,可直接配合 fetch 或 axios 使用。

第三方 API 的 Go 客户端

为 Stripe 或 GitHub 的 Webhook 负载生成带 json 标签的结构体。可选键带 omitempty,嵌套对象成为独立类型。

用 Zod 做运行时校验

把请求体示例转成 Zod schema,在 Next.js 路由处理函数里用 schema.parse() 拦截格式错误的输入,再用 z.infer 得到静态类型。

配置文件

粘贴 JSON 配置文件生成带类型的接口,让编辑器自动补全键名并发现拼写错误。

常见问题

可选字段是怎么识别的?+

当根节点或嵌套值是对象数组时,会合并所有元素。至少在一个元素中缺失的键会被标为可选(TypeScript 的 ?、Go 的 omitempty、Zod 的 .optional())。

null 值怎么处理?+

在某些元素中为 null、在其他元素中为字符串的键会变成 string | null(Zod 的 nullable()、Go 的 *string)。在示例中始终为 null 的键保持 null,因为无法得知其真实类型。

为什么 Go 中的数字是 int64?+

示例中的整数生成 int64,小数生成 float64。如果某个字段两者都有,会放宽为 float64(TypeScript 中为 number)。

能识别日期、枚举或 UUID 吗?+

不能。JSON 没有日期或枚举类型,它们会显示为 string。请手动细化,例如使用 z.string().datetime() 或字面量联合类型。