跳到主要内容

精准映射:JSON To TypeScript定义 — Numio

根据 API 响应等 JSON 示例生成 TypeScript interface 或类型别名。会处理嵌套、null 和混合数组,转换在浏览器中进行。

为 API 响应创建具名的 TypeScript 类型。

Converted in your browser. Null stays a value type; ? marks a field missing from some objects in an array. Empty arrays use unknown elements.

Load an example (replaces your input)

JSON

TypeScript

适用场景

  • 为 API 响应创建具名的 TypeScript 类型。
  • 比较数组中的多个对象,查看不同的类型和可选字段。

使用方法

  1. 粘贴真实 JSON 或加载某个示例。加载示例会替换你的输入。
  2. 设置根类型名,并选择 interface(嵌套对象成为独立类型)或 type(一个类型别名,嵌套对象内联)。
  3. 检查 null、可选(?)字段以及 string/number 联合类型,然后复制类型。

JSON 输入

[{"id":1,"name":"Tokyo"},{"id":2}]

TypeScript 输出(Root,interface)

export type Root = RootValueItem[];

export interface RootValueItem {
  id: number;
  name?: string;
}

功能与限制

会检查每个数组元素。示例中第二个对象缺少 name,因此它变为可选;而存在但值为 null 的字段会变为与 null 的联合类型。

空数组得到 unknown[]。混合数组变为联合类型的数组,而不是定长元组。

类型只覆盖示例中出现的内容。从未出现的字段、日期或邮箱格式、取值范围以及字段之间的关系都不会推断。

输入必须是标准 JSON;请先用 JSON 格式化工具清理注释或末尾逗号。带前导零的 ID 请以字符串输入。

输入上限为 1,000,000 个字符、约 64 层嵌套和 50,000 个值。TypeScript 类型不会在运行时校验数据。

FAQ

应该生成 interface 还是 type?

两者描述的结构相同。interface 为每个嵌套对象创建一个具名 interface,便于复用;type 创建单个类型别名,嵌套对象以内联方式写出。

能生成 TypeScript class 吗?

不能,只生成 interface 或类型别名。如果需要运行时校验,请使用 JSON 转 Zod,并按你的规则调整 schema。

null 和可选字段有什么区别?

{"name":null} 有 name,值为 null;{} 则完全没有 name。null 会保留在类型中,只有当同一数组中的部分对象缺少该字段时才会加上 ?。

根节点为 JSON 数组时会生成什么?

一个表示数组的类型别名和一个表示元素的 interface,如上例中 Root 为 RootValueItem[]。

规范与参考资料