← 返回工具箱

DEVELOPER / TYPESCRIPT

JSON 转 TypeScript

把真实 JSON 样本推断成 TypeScript interface 或 type。对象数组会合并同名字段,某条记录缺少的字段自动标成可选,混合值生成联合类型。

INFERENCE OPTIONS

类型推断工作区

TypeScript 输出

3 个声明 · 2 个可选字段 · 1 个联合类型

export type Tool = ToolItem[];

export interface ToolItem {
  id: number;
  name: string;
  active?: boolean;
  tags: string[];
  owner: ToolItemOwner;
  score: number | null;
}

export interface ToolItemOwner {
  name: string;
  level?: number;
}

HOW INFERENCE WORKS

推断规则

数组对象会合并

同一数组中的对象按字段名合并,缺失字段标记为可选,不再为每条记录生成一个接口。

null 保留为联合类型

同一字段同时出现数字和 null 时生成 number | null,不会擅自改成可选属性。

空数组只能是 unknown[]

样本中没有元素就没有类型证据。补一条真实元素后,工具才能推断准确类型。

样本不是 API 契约

没有出现在示例里的值仍可能在线上出现,正式项目应结合接口文档或 JSON Schema 复核。

RELATED TOOLS

查看全部工具 →

USE & REVIEW

JSON 转 TypeScript 类型常见问题

查看全部工具指南 →

为什么一份 JSON 样本不能等同于完整 API 类型?

类型生成只能依据样本里真正出现的值。未出现的枚举值、错误响应、分页字段或偶发 null 无法凭空推断,因此输出适合作为起点。正式项目应再对照接口文档、OpenAPI 或 JSON Schema,并补充多组真实响应测试。

对象数组为什么会合并成一个接口?

同一数组通常表示同一种记录。工具会按字段名合并每个对象:所有记录都有的字段保持必填,只在部分记录出现的字段标为可选,类型不同的同名字段生成联合类型。这样比给每一条记录生成一个几乎重复的接口更接近常见 API 数据结构。

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

null 表示字段存在但值为空,可选字段表示该键可能完全不存在。样本中同一字段出现数字和 null 时会生成 number | null;某条记录缺少该字段时才会加问号。两种情况可能同时存在,例如 score?: number | null。

应该选择 interface 还是 type?

对象模型需要声明合并或被类 implements 时常用 interface;需要联合、交叉或更灵活组合时常用 type。这个工具两种都支持,但数组根节点、原始值和联合类型仍会用 type 别名表达。选择应服从项目现有规范,不必为了风格强行转换。

带空格、连字符或数字开头的 JSON 键会怎样处理?

这些键不是合法的裸 TypeScript 属性名,工具会保留原文字段并用字符串字面量包起来,例如 "user-name": string。字段不会被擅自改名,因此运行时访问方式仍与原始 JSON 一致。

JSON 会上传服务器吗,为什么限制 2 MB?

不会。解析、样本合并、类型推断、复制和 .ts 下载都在当前浏览器完成。2 MB 上限用于避免在每次编辑时解析超大文本导致页面长时间卡顿。类型推断通常只需要一小段具有代表性的记录;大响应应先脱敏并裁成能覆盖字段变化的样本。