如何从 JSON 生成 TypeScript
- 粘贴一个 JSON 示例。数组中包含的元素越多,可选字段和联合类型的识别就越准确。
- 设置根类型的名称,并选择
interface或type,以及是否添加export和readonly。 - 将 TypeScript 代码复制到你的项目中,或下载为
.ts文件。
如何从 JSON 推断 TypeScript 类型
| JSON | TypeScript |
|---|---|
"Ada" | string |
42、3.14 | number |
true | boolean |
null 与其他值并存 | 联合类型,如 string | null |
"address": {"city": "Paris"} | 单独的 interface Address |
"users": [{"id": 1}] | User[],元素名称会改为单数形式 |
| 部分数组元素中缺失的键 | 可选属性 key?: |
[1, "a"] | (string | number)[] |
[] | unknown[] |
{} | Record<string, unknown> |
示例
JSON {"id": 1, "name": "Ada", "tags": ["admin"], "manager": null} 会转换为:
export interface Root { id: number; name: string; tags: string[]; manager: null; }
请将 Root 重命名为更有意义的名称,例如 User 或 ApiResponse。结构完全相同的嵌套对象(例如账单地址和收货地址)会共用一个接口;不是合法标识符的键会加上引号,例如 "first-name": string。
常见问题
interface 还是 type,应该选哪个?
对于描述对象结构,两者的效果相同。interface 可以被扩展和合并,而 type 别名还能描述联合类型。许多团队用 interface 描述对象;请遵循你所在代码库的风格。
如何识别可选字段?
同一数组中的对象会被合并。在部分对象中缺失的键会成为可选属性(key?:),而值类型不同的键会成为联合类型。
生成的类型能在运行时校验数据吗?
不能。TypeScript 类型在代码运行时就不存在了。如需校验传入的数据,可以用我们的 JSON Schema 生成器从同一示例生成 JSON Schema,再借助 Schema 校验库进行校验。
我的 JSON 会被发送到服务器吗?
不会。类型在你的浏览器中生成,因此可以放心粘贴私有的 API 响应。