跳到正文
EVOA Toolbox

JSON 转 TypeScript

根据 JSON 示例生成 TypeScript 接口或类型。支持嵌套对象、数组、联合类型、null 和可选属性。

在浏览器中本地处理,你的文本不会被上传。

正在加载工具…

这个工具能做什么

粘贴一段 API 响应示例或配置文件,即可得到可直接使用的 TypeScript 声明。嵌套对象会变成各自命名的接口,数组会变成带类型的数组,null 值会被标注为 null,让你看出哪些字段可能缺失。

当数组包含多个对象时,它们的结构会被合并:每个元素都有的属性保持必填,只在部分元素中出现的属性则变为可选(name?: type)。包含不同类型值的数组会生成联合类型,如 (string | number)[]。不是合法标识符的属性名(如 first-name)会加上引号。

你可以选择根类型名称、输出为 interface 还是 type 别名、是否 export,以及是否将属性标记为 readonly。类型推断在你的浏览器中、基于你提供的示例进行,所以结果的完整程度取决于示例:请检查生成的内容,并在 API 可能返回其他结构的地方放宽类型。

使用方法

  1. 1粘贴一份有代表性的 JSON 示例(示例越多样,对可选字段的识别越准确)。
  2. 2设置根类型名称,并选择 interface 或 type。
  3. 3根据你的代码风格切换 export 和 readonly。
  4. 4复制生成的代码,或将其下载为 types.ts,然后对照你的 API 约定检查字段类型。

支持的格式

输入:严格的 JSON。输出:使用 interface 或 type 别名的 TypeScript 声明(.ts)。

隐私

此工具在你的浏览器中运行。你提供的数据在你的设备上处理,不会发送到我们的服务器。

限制

  • 类型仅根据一份示例推断。在你的示例中始终是字符串的字段,在其他情况下可能是数字或 null。
  • 空数组会被标注为 unknown[],因为没有可供推断的内容。
  • 类似映射的对象(例如以 ID 作为键)会生成为固定属性,而不是 Record<string, T>。请手动改写。
  • 日期、UUID 和枚举只会显示为普通的 string 或 number;工具无法知道它们的含义。
  • 所有数字都会标注为 number,包括超过 2^53、会被 JSON.parse 舍入的值。

常见问题

可选属性是如何判定的?

只通过比较同一数组内(或在相同位置重复出现)的对象来判定。如果某个属性至少在一个元素中缺失,就会被标记为可选。值为 null 的属性会被标注为 null(或包含 null 的联合类型),而不是可选。

该选 interface 还是 type?

对于普通的对象结构,两者可以互换。interface 可以扩展和合并;type 别名与联合类型和映射类型配合得更好。选择你的代码库已在使用的那个即可。

为什么两个嵌套对象会使用同一个类型名?

结构相同的对象会复用同一个声明。如果两种不同的结构会得到同一个名称,第二个会加上数字后缀,例如 Item2。

我的 JSON 会被上传吗?

不会。类型是在你的浏览器中生成的。

相关工具