JSON 转 TypeScript

粘贴一段 JSON 示例,工具即可推断出与其结构匹配的 TypeScript 接口。字段类型根据观测到的值(stringnumberbooleanArray<T>)确定;嵌套对象会获得各自的具名接口;而被观测为 null 或缺失的字段,则会根据你偏好的风格变为可选(?)或可为空(| null)。

如何将 JSON 转换为 TypeScript

  1. 1

    粘贴 JSON

    单个示例即可,但提供多个示例能提升对可空性和联合类型的推断准确度。

  2. 2

    选择输出风格

    `interface`(默认)、`type` 别名,或将所有字段标记为 `readonly` 的只读接口。

  3. 3

    选择可选策略

    将字段标记为 `?`(可能不存在)或 `| null`(始终存在,但可能为 null)。

  4. 4

    复制类型

    粘贴到 `.ts` 文件中,即可对 API 响应进行强类型访问。

示例

输入:

{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }

输出:

interface User {
  id: number;
  name: string;
  age: number | null;
  tags: string[];
  address: Address;
}

interface Address {
  city: string;
}

类型映射

JSON TypeScript
字符串 string
整数 / 小数 number
布尔值 boolean
仅 null null
null + T T | null(或 T?
T 的数组 T[]
混合数组 (T1 | T2)[]
对象 具名的嵌套接口
空数组 unknown[](无法推断)

可选字段与可空字段

  • foo?: string,该字段可能在对象中不存在,需进行 undefined 检查。
  • foo: string | null,该字段始终存在,但可能被显式设为 null。
  • foo?: string | null,可能不存在,也可能为 null。

JSON 本身没有 undefined,但不同 API 表示字段缺失的方式各异。请与你所用 API 的语义保持一致。

  • REST API 通常会省略缺失字段 -> ?:
  • GraphQL 总是返回每一个请求的字段 -> | null
  • 有些 SDK 会在不同场景下同时使用两种方式。

联合类型与字面量类型

如果工具在多个示例中发现同一个字符串字段只取少数几个值("status": "pending""active""archived"),它可以输出字符串字面量联合类型:

status: "pending" | "active" | "archived";

如需此行为,请启用「推断字符串字面量联合」。

常见错误

  • 仅凭单个示例推断。 每个字段都会变为必填,无法观测可空性。要获得更好的类型,请提供 5-10 个多样化的示例。
  • 空数组。 "tags": [] 不提供任何类型信息,生成器会输出 unknown[]。请提供至少包含一个元素的示例。
  • 混合类型数组。 [1, "two", true] 会生成 (number | string | boolean)[]。通常这意味着该 JSON 应当重新设计,而不是照原样定型。
  • 数字字符串键。 JSON {"1": "a", "2": "b"} 在 TypeScript 中仍然是对象(Record<string, string>),而非数组。生成器会正确处理这种情况。

常见问题

与你的 API 保持一致。会丢弃 null 字段的 REST API 适合用 ?:。始终返回每个所选字段的 GraphQL 适合用 | null。拿不准时,采用必填语法的 T | null 更为严格,能在编译期捕获更多错误。

会。只要启用该功能并提供多个示例,在各示例中观测到 2-5 个不同字符串值的字段就会被输出为字面量联合类型。超过该阈值则回退为 string

多数情况下用 interface,它对扩展开放,TypeScript 对其优化也更好。type 别名则适用于联合、交叉、元组和映射类型。对于从 JSON 派生的类型,两者都可以,按项目约定选择即可。

能。每个嵌套对象都会成为独立的接口,名称由键派生(user.address -> Address)。对于非常深或高度重复的结构,可考虑改用 JSON Schema 及专门的 schema-to-TS 生成器。

相关工具

此工具还提供其他语言版本