从一段 JSON 到 interface,会生成什么?
输入样例
{
"id": 42,
"roles": ["editor"],
"profile": {"city": "昆明"}
}字符串、数字、数组和嵌套对象都在一份样例中出现。
生成方向
interface UserResponse {
id: number;
roles: Array<string>;
profile: UserResponseProfile;
}嵌套对象会拆成独立 interface,数组按第一个元素推断类型。
生成后必须人工确认的 4 件事
| 样例情况 | 工具会怎么做 | 你还要确认什么 |
|---|---|---|
| 字段在样例中出现 | 生成必填属性 | 接口是否可能省略该字段,必要时改为 field?: type。 |
字段值为 null | 生成通用类型 | 根据文档补成 string | null、对象或其他准确类型。 |
| 数组为空 | 生成通用数组 | 手动指定数组元素类型,不要长期保留 unknown[]。 |
| 字段名包含连字符或空格 | 使用字符串属性名 | 确认是否需要在代码中做字段映射或转换。 |
interface 不是接口文档的替代品
生成器只从一份样例推断结构,不知道分页字段是否总出现、同一数组是否存在不同 item 类型,也不知道时间字符串应该使用什么业务类型。它的价值是让你从零开始时少写一遍字段,而不是替你设计模型。
最可靠的做法是:用字段最全的响应生成初稿,再依据 OpenAPI、接口文档或后端类型定义完成收紧。
常见问题
- 应该生成 interface 还是 type?
- 当前工具生成 interface,适合描述对象模型。联合类型、映射类型和复杂泛型需要按项目需求手动补充。
- 能从多个 JSON 样例合并类型吗?
- 当前只分析一次输入。若不同响应字段不一致,请以字段最全的样例生成后,再人工补充可选属性和联合类型。
- 能直接给 Axios 或 fetch 使用吗?
- 可以把生成的 interface 用作请求返回值的类型起点,但请求层、错误响应和运行时校验仍应单独定义。