Paste JSON as Code 插件可将剪贴板合法JSON一键生成TypeScript interface,支持嵌套、数组、null联合类型及可选字段;需注意JSON有效性、语义类型手动处理、接口命名与导出。

用 Paste JSON as Code 插件一键生成 TypeScript Interface
VSCode 本身不支持直接把剪贴板里的 JSON 转成 interface,但装一个轻量插件就能做到——Paste JSON as Code(作者:quicktype)。它不是靠猜测,而是基于 JSON 实际结构做类型推断,生成的 interface 可读性好、字段名保留原样、嵌套和数组也能正确处理。
安装后,复制任意合法 JSON(比如接口返回的响应体),在 TS 文件中光标定位到想插入的位置,右键 → Paste JSON as Code → 选 TypeScript → 确认。它会自动补全 interface 名(默认叫 RootObject,可手动改)和所有嵌套层级。
常见错误现象:Paste JSON as Code 报错 “Invalid JSON” —— 大概率是剪贴板里混入了不可见字符(比如从浏览器控制台复制带格式的日志)、末尾多了逗号、或用了单引号。解决方法:先粘贴到 JSONLint.com 验证,或用 VSCode 自带的 JSON 模式(Ctrl+K M → 输入 json)检查语法高亮是否报错。
JSON 中有 null 或可选字段时,interface 会怎么处理?
默认情况下,Paste JSON as Code 会把 null 值字段识别为联合类型,比如 "name": null 会生成 name: string | null;如果某字段在部分对象中缺失(比如分页列表里有的项没 avatar),它会加 ? 标记为可选属性:avatar?: string。
如果你希望强制非空(比如后端文档保证该字段一定存在,只是示例数据为 null),可以:
- 手动删掉
| null,但下次重新生成会覆盖 - 用插件高级配置:在 VSCode 设置里搜
quicktype,找到Quicktype: Nullability,设为required(这样所有字段都按非空生成,null 值会被忽略) - 更稳妥的做法是:先用插件生成基础
interface,再手动调整,别依赖“一次生成永久可用”
遇到时间字符串、数字字符串等语义类型怎么办?
Paste JSON as Code 只看值的字面类型,不会识别业务含义。比如 "created_at": "2024-05-20T10:30:00Z" 会生成 created_at: string,而不是 Date;"id": "123"(其实是数字 ID 但被序列化成字符串)会生成 id: string。
这不是 bug,是设计使然——TypeScript 类型系统里 Date 不是原始类型,string 和 number 的互转需运行时处理。所以:
- 别指望插件自动加
as Date或类型断言 - 若项目统一用
DateTimeString这类自定义 type,可生成后全局替换string→DateTimeString(注意别误伤其他 string 字段) - 对 ID 字段,建议生成后手动改为
id: number并加注释说明“后端保证为数字字符串,前端 parse 后使用”,避免后续人误解
生成的 interface 名太长或想批量处理多个 JSON 片段
插件默认用 RootObject,但你可以:
- 粘贴前,在剪贴板 JSON 最外层加一个 dummy 字段,比如
{"UserInfoResponse": {...}},插件会提取 key 名作为 interface 名 - 或者粘贴后立刻按
F2改名,VSCode 会自动重命名所有引用(前提是没关 JS/TS 的自动重命名功能) - 批量场景(比如要为 10 个接口定义类型):别反复复制粘贴,先把所有 JSON 存成
.json文件,用命令行工具quicktype(同作者)批量生成:quicktype -l typescript -o models.ts *.json
,比手动点更快也更可控
真正容易被忽略的是:生成的 interface 默认没有 export,如果要用在其他文件,得自己加上;另外,如果 JSON 里有重复字段名但类型不同(比如同一 key 在不同位置是 string 或 number),插件会报错,这时必须人工拆成多个 interface,不能强求一步到位。


















