类型生成

JSON 转 TypeScript把响应样本变成可审阅的类型

先看示例中缺少的 tag 和值为 null 的 score,再替换为你的响应。已有契约时,可切换 Schema 辅助模式。

JSON 转 TypeScript

JSON 输入

解析与生成均在当前浏览器完成,不上传或存储输入。

TypeScript 结果

生成选项

缺失字段标为可选,null 保持为空值,空数组使用 unknown[]。建议在项目中开启 strictNullChecks。

3 个声明 · 1 个可选属性

JSON 转 TypeScript 适合在接入接口时建立第一版数据模型。只看一次成功响应,很容易把偶尔缺失的字段误写成必填;把多条有代表性的记录放进同一个数组,才有机会看见这些差异。

工具会把“字段不存在”和“字段存在但值为空”分别表达。结果仍需结合接口文档核对,特别是从未出现在样本中的字段、错误响应以及不同状态之间的关联,不能仅凭生成代码推断完整契约。

为什么使用这个 JSON 转 TypeScript 工具

同时观察多条记录

JSON 转 TypeScript 会读取数组里的所有元素。某条记录没有 tag 时,该字段标记为可选;score 同时出现数字与 null 时,则保留两种值的联合类型。缺失和空值不再被同一个开关混为一谈。

两条记录合并成类型,缺失字段用虚线标记,显式空值保留空心标记。

用明确契约补足样本盲区

切换 Schema 辅助模式后,required 决定字段是否必填,枚举描述允许的值。工具遇到无法表达的断言会报出路径,不会忽略约束后继续给出看似完整的类型。切换模式保留输入,便于自行调整。

样本记录与结构契约沿两条路径生成类型声明卡片。

导出前值得核对的三件事

01

把变体放在同一数组位置

需要比较多条响应时,将记录组成一个合法数组。只有同一结构位置的对象会共同推断字段;文档其他位置恰好同名的属性,不会因此被拼成同一个业务模型。

02

先选输入模式,再加载对应示例

模式切换不会替换输入内容;示例按钮会加载当前模式的示例。样本中的全部可选选项不会覆盖 Schema 的 required,因此切到契约输入后,该选项会禁用。

03

留意刷新时机和根类型名称

自动生成在停止编辑约 350 毫秒后运行。关闭后显示生成按钮,也可按 Ctrl/Cmd+Enter。输入或选项一变,复制和下载立即禁用,直到新结果成功;修改 Root 可统一调整派生名称。

从实际值推断结构与声明

数组并非只读取第一项

同一位置出现数字和字符串时会产生联合类型。嵌套数组也会共同推断元素;空数组与非空数组并列时采用已有元素证据,完全没有元素信息时才使用 unknown[]。不会只抽取前几条记录。

可选与可空各有依据

字段在部分对象中不存在时,生成问号;显式 null 则保留为 null 或联合成员。仅看到空值时,不能猜出它未来是字符串还是数字。建议在项目中启用 strictNullChecks,让类型检查真正区分空值。

保留字段拼写,生成合法名称

TypeScript 接口生成会为嵌套对象派生名称,冲突时添加稳定数字后缀。属性原名不做重命名,短横线、空格等内容用引号保护。根名称允许最多 64 个 ASCII 标识符字符,并拒绝保留字。

样本与有限契约共享一个入口

JSON Schema 转 TypeScript 支持基本类型、properties、required、单个 items、布尔 additionalProperties、标量 enum/const 及受限 anyOf。也可切换 interface 与 type,调整两格或四格缩进及 export。JSON 转 TS 输出的是声明代码。

推断成立的范围与限制

样本不等于完整接口契约
推断只依据输入值。数组对象按字段合并,不能保留判别字段与其他属性之间的关联;日期、UUID 等文本保持 string,不凭一次样本推测枚举。尚未出现的变体需要自行补充和审核。
静态声明不执行数据校验
不生成反序列化函数、类、Zod 或运行时验证器。integer 也只表达为 number,不保证整数范围和精度。additionalProperties=false 会省略索引签名,但 TypeScript 的结构类型不等于运行时禁止额外属性。
不支持的 Schema 断言会停止生成
$ref、定义、oneOf/allOf、条件、format、正则、长度、数值范围和元组均不支持;对象及数组关键字必须有对应的显式 type。也不接受 Schema 形式的 additionalProperties 或对象、数组枚举;溢出或超安全幅度的数字字面量会报错。
只接收严格单文档 JSON
注释、尾逗号、JSONL 和重复对象键会导致失败,语法问题显示行列。不提供自动修复、URL 读取、文件导入或批量文件操作。含有 type 字段的普通数据不会被自动识别为 Schema,必须手动切换模式。
超限会阻止整份结果导出
输入最多 500,000 字符、100 层、50,000 节点;输出最多 1,000,000 字符与 1,000 个声明。不会截断代码后继续下载。没有字段证据的空对象使用 unknown 索引签名,避免把宽泛的 {} 当作准确的数据模型。

JSON 转 TypeScript 常见问题

数组里的对象字段不完全一致时会怎么处理?

工具合并同一数组位置所有对象的字段。部分对象缺少的属性会带问号,所有已观察值的类型共同决定该属性类型。只有一条记录时,没有证据判断它的某个字段是否也可能缺失。

字段名包含短横线或空格还能生成类型吗?

可以。属性名保持原始拼写,必要时用字符串字面量加引号;嵌套声明名称则会转换成合法标识符。JSON 转 TypeScript 会避开生成名称冲突,但业务命名仍建议在编辑器里审阅。

interface 和 type 有什么区别?

本页的选择主要改变对象声明形式。interface 适用于对象结构,type 还能为联合类型、数组和基本类型命名。因此选择 interface 后,如果根值是数组或标量,最外层仍使用类型别名。

数组中混有不同类型时如何转换?

不同元素类型会形成联合类型,例如数字与字符串可生成 (number | string)[]。对象元素先共同推断字段,嵌套数组继续递归处理。它不会把每个数组位置生成为固定长度元组。

如何处理 null 值?

显式空值会保留。字段只出现 null 时,类型就是 null;同时出现数字时,结果为 number | null。字段是否可选由存在与否决定,不能通过移除 null 来替代。

发现需要核对的推断结果?

从一组真实响应开始

用 JSON 转 TypeScript 检查包含缺失字段和空值的多条响应,确认根名称与声明形式后,再将代码带回项目中审阅。