toolgarden.xyz
EN
JSONTypeScriptinterface类型生成API

如何把 JSON 转成 TypeScript 接口(interface)

手写 API 响应的 TypeScript 类型既慢又容易出错。用一段真实 JSON 样本自动推断 interface,几秒就能得到可直接使用的类型定义。

ToolGarden 推荐的工具优先在浏览器本地运行,文件和文本不必上传到服务器,适合更注重安全隐私的日常处理。

发布于 2026年7月27日约 6 分钟阅读作者 ToolGarden

前端接入一个新接口时,最枯燥的一步往往是照着 JSON 响应手写 TypeScript 类型。字段一多,很容易漏写、写错类型,或者忘记某个字段是可选的。

其实这一步完全可以自动化:给一段真实的 JSON 样本,工具就能推断出每个字段的类型,并生成对应的 TypeScript interface。下面先看它是怎么工作的,再讲清楚几种容易出错的边界情况。

一个最简单的例子

假设接口返回下面这段 JSON:

{
  "id": 1001,
  "name": "ToolGarden",
  "isActive": true,
  "tags": ["json", "pdf"],
  "owner": {
    "email": "hi@example.com",
    "verified": false
  },
  "lastLogin": null
}

根据字段的值,可以推断出对应的 TypeScript 类型。嵌套对象会被拆成独立 interface,数组会推断出元素类型:

interface Owner {
  email: string;
  verified: boolean;
}

interface Root {
  id: number;
  name: string;
  isActive: boolean;
  tags: string[];
  owner: Owner;
  lastLogin: null;
}

类型是怎么推断出来的?

  • 字符串 → string,数字 → number,布尔值 → boolean。
  • 对象 → 独立的 interface,字段名作为类型名(如 owner → Owner)。
  • 数组 → 元素类型加 [],例如字符串数组是 string[]。
  • null → null(无法从单个 null 值推断出真实类型,需要人工补充)。
  • 同名字段在不同对象里类型不同时 → 生成联合类型(如 string | number)。

几个容易出错的边界情况

1. 可选字段

单个 JSON 样本无法告诉工具“哪些字段可能缺失”。如果某个字段有时会返回、有时不返回,建议手动把它标成可选(在字段名后加 ?)。用包含多种情况的样本,或多个样本合并推断,可以减少这类遗漏。

2. null 与真实类型

像 lastLogin: null 这样的字段,工具只能推断成 null。实际业务里它多半是 string | null 或 number | null。拿到一份 lastLogin 有值的样本再生成,或手动改成联合类型,会更贴近真实接口。

3. 空数组和混合数组

空数组 [] 无法推断元素类型,通常会退化成 unknown[] 或 any[]。混合类型数组(如 [1, "a"])会生成 (number | string)[]。数组能提供的样本元素越丰富,推断结果越准确。

生成类型时的实用建议

场景建议做法
字段可能缺失手动加 ? 标为可选,或用多份样本合并推断
字段值为 null改成 T | null(如 string | null)
数组为空手动指定元素类型,避免 any[]
枚举类字符串按需改成字面量联合类型(如 "draft" | "published")
样本不合法先用 JSON 格式化工具校验,再生成

在浏览器本地生成,不上传接口数据

API 响应里经常带着 token、邮箱、用户 ID 等敏感信息,把它粘贴到会上传数据的在线工具并不安全。ToolGarden 的 JSON → TypeScript 工具在浏览器本地完成推断,样本不会上传到服务器,适合直接拿真实响应来生成类型。

总结

从 JSON 自动生成 TypeScript interface,能省下大量手写类型的时间,也能减少人为错误。真正需要你关注的,是样本无法覆盖的部分:可选字段、null 的真实类型和空数组。把这几点补齐,生成的类型就能直接放心用在项目里。

常见问题

Q.JSON 转 TypeScript 会上传我的接口数据吗?

ToolGarden 的 JSON → TypeScript 工具在浏览器本地完成类型推断,粘贴的 JSON 样本不会上传到任何服务器,也不会被记录。API 响应里常带有 token、邮箱、用户 ID 等敏感字段,用本地工具生成类型可以避免把这些信息发送到外部服务。生成的 interface 直接显示在页面上,复制走即可。

Q.为什么生成的字段类型是 any 或 unknown?

这通常出现在两种情况:一是字段值为空数组 [],工具无法从空数组推断出元素类型;二是字段值为 null,无法判断它真实应该是 string、number 还是别的类型。解决办法是提供一份字段有真实值的样本再生成,或者在生成后手动把它改成明确的类型,例如 string[] 或 string | null。

Q.如何处理有时才返回的可选字段?

单个 JSON 样本无法表达“这个字段可能不存在”,所以默认生成的字段都是必填的。如果你知道某些字段是可选的,可以在生成后手动在字段名后加上 ?,把它标记为可选。更稳妥的做法是收集多份包含不同情况的样本,或在生成前把这些字段的典型缺失场景考虑进去,减少后续手动调整。