JSON → TypeScript 类型推导
从一段 JSON 样本推导可被 TypeScript 解析的 interface / type:支持嵌套对象、数组、null、空对象、混合数组联合类型与特殊键引号;纯本地计算。
输入与参数
input— JSON 输入rootName— 根类型名outputStyle— 声明形式exportDeclaration— 添加 export 关键字
真实示例
{"id":1,"active":true,"deleted":null,"empty":{},"tags":["a",2,{"x":false}],"__proto__":{"polluted":true}}
→ // 空对象推导为 Record<string, never>;它表示「没有已知键」,不是任意对象。
export interface RootTagsItem {
x: boolean;
}
export interface Root__proto__ {
polluted: boolean;
}
export interface Root {
id: number;
active: boolean;
deleted: null;
empty: Record<string, never>;
tags: Array<string | number | RootTagsItem>;
"__proto__": Root__proto__;
}
限制与失败处理
单个 JSON 样本只能推导样本中出现的形状,不能代表所有运行时数据;超大整数只标注 number 并附精度提示;输出不是完整类型系统,也不含泛型可配置策略。输入上限 1 MiB / 深度 64 / 60000 节点,错误含行列号。
FAQ
空数组和空对象怎么处理?
空数组没有样本元素,推导为 unknown[];空对象推导为 Record<string, never>,两者都不伪造结构。
字段名含连字符或保留字怎么办?
自动输出加引号的属性名,例如 "a-b"、"constructor"、"__proto__",保证声明能被 TypeScript 解析。
能执行 JavaScript 对象字面量吗?
不能,也不接受未加引号的键、单引号、注释或函数;输入必须是严格 JSON,绝不 eval 用户代码。