JSON 转 TypeScript 类型

免费在线 JSON 转 TypeScript 工具,纯前端本地处理,数据不上传服务器。粘贴 JSON 自动生成 interface 或 type 声明,支持嵌套对象、数组元素类型合并、部分元素缺失的字段自动标可选、字段名非法时自动加引号。

边打边生成,不用按按钮。Ctrl / Cmd + Enter 可立即转换。
数组里缺字段,为什么生成出来带问号

比如 [{ "a": 1 }, { "a": 2, "b": 3 }],第二个元素才有 b, 生成的是 { a: number; b?: number }。

这里的 ? 不是保守,是必须——不标的话类型就在骗人: 你以为每个元素都有 b,拿它去访问,运行时就会炸。

空数组为什么是 unknown[] 而不是 any[]

空数组推不出元素类型,只能给个兜底。any[] 会让下游所有访问 绕过类型检查;unknown[] 至少逼着你先收窄再用。

想要精确类型的话,手动改一下就行——这本来就是个起点,不是终稿。

它不会替你猜语义

字符串就是 string,不判断是不是日期、邮箱、URL; 数字就是 number,不分整数小数(TypeScript 本来也不分)。

这是有意的:猜错了比不猜更糟。给你一个看起来更"聪明"、 实际上需要逐条核对的结果,还不如给一个诚实的基础类型。

字段名不是合法标识符时会加引号

{ "my-key": 1 } 生成 "my-key": number。 不加引号的话,生成的代码根本编译不过。