当前位置: 首页 > news >正文

项目实际情况:已经开发一段时间,现在后端引入SpringDoc/OpenAPI,前端采用哪个方案更合适?用vite-plugin-openapi-ts?还是用openapi-typescript

基于你项目的实际情况(后端刚引入 SpringDoc、OpenAPI 文档尚不完整,前端已有大量手工编写的 axios API 封装),最合适的方案是openapi-typescript,而不是vite-plugin-openapi-ts或其他全客户端生成工具。

✅ 推荐方案:openapi-typescript(只生成类型,不生成客户端)

为什么?

对比项openapi-typescriptvite-plugin-openapi-ts你的现状
对文档完整性要求低(缺失的 schema 变成unknown,不报错)高(缺失会导致Schemes找不到,编译失败)后端文档不完整,容易报错
与现有手工 API 集成无缝(只需替换类型定义)侵入式(需要改用生成的客户端)已有大量手工 API,不宜推翻
学习成本低(一条命令生成类型,手动写请求)中(需配置自定义 axios 适配器,解决缺失问题)希望快速见效
长期维护类型自动同步,请求逻辑保持手工控制全自动,但依赖文档完整性可以逐步完善文档后,再考虑是否迁移
兼容现有代码高(只需将手写类型替换为从paths推导的类型)低(需要改写所有 API 调用)改造成本最低

🛠️ 实施步骤(5 分钟完成)

1. 安装并生成类型

bash

npm install -D openapi-typescript

package.json中添加脚本:

json

"scripts": { "gen:api": "openapi-typescript http://localhost:8080/v3/api-docs --output src/api/generated.ts" }

运行生成命令:

bash

npm run gen:api

2. 修改现有 API 文件,使用生成的类型

原来手工定义的类型src/types/index.ts):

ts

export interface CapitalUseResponse { ... } export interface CapitalUseQueryRequest { ... }

现在从generated.ts中提取类型src/api/capital.ts):

ts

import type { paths } from './generated'; import { request } from '@/utils'; // 从 paths 中提取请求体和响应类型 type CapitalUseQueryPath = paths['/capital/usages/query']['post']; type CapitalUseQueryRequest = CapitalUseQueryPath['requestBody']['content']['application/json']['schema']; type CapitalUseResponse = CapitalUseQueryPath['responses']['200']['content']['application/json']['schema']; // 其他接口类似... type CapitalUseCreatePath = paths['/capital/usages/workflow']['post']; type CapitalUseCreateRequest = CapitalUseCreatePath['requestBody']['content']['application/json']['schema']; type CapitalUseCreateResponse = CapitalUseCreatePath['responses']['200']['content']['application/json']['schema']; // 原有的 API 函数保持不变,只是类型替换 export const queryCapitalUsePage = (queryRequest: CapitalUseQueryRequest, signal?: AbortSignal) => { return request.post<PageResult<CapitalUseResponse>>("/capital/usages/query", queryRequest, { signal }); }; export const addCapitalUseWithGenerateWorkflow = (createRequest: CapitalUseCreateRequest, signal?: AbortSignal) => { return request.post<CapitalUseCreateResponse>("/capital/usages/workflow", createRequest, { signal }); };

3. 逐步删除手写的重复类型

当你确认某个 DTO 已从generated.ts中正确推导后,就可以删除src/types中对应的手写接口,避免维护两套。

4. 当后端文档完善后(可选),再考虑是否升级到全客户端生成

如果未来所有 DTO 都完整出现在 OpenAPI 文档中,且你希望进一步减少手工 API 代码,可以再评估vite-plugin-openapi-ts@hey-api/openapi-ts。但当前阶段完全没必要。

📌 总结

  • 推荐工具openapi-typescript

  • 核心优势:容忍文档不完整,与现有代码和谐共存,改造成本最低,立即解决类型同步问题。

  • 长期价值:你仍然保留对请求逻辑的完全控制(axios 拦截器、错误处理、取消请求等),同时享受类型安全。

这个方案能让你在今天之内解决所有类型报错,并让后续开发中前后端类型自动同步。如果生成过程中遇到具体的类型推导问题(比如嵌套路径太深),我可以帮你写几个辅助类型来简化提取过程。

http://www.jsqmd.com/news/588371/

相关文章:

  • 字节跳动开源的超级智能体 DeerFlow2.0,正成为全球AI开源圈的焦点项目。
  • 2022年度“湖北工匠杯”职业技能竞赛:软件测试员实战技能全解析
  • claw-code 源码分析:从「清单」到「运行时」——Harness 为什么必须先做 inventory 再做 I/O?
  • TensorRT 8.5.1与Python 3.8集成实战:从安装到验证
  • 技术文章大纲:用Anaconda驯服AI开发流
  • DeepSeek 与 Gemini 的架构哲学与场景适配指南
  • Kali虚拟机内存扩展实战:从Gparted操作到swap分区配置
  • 使用 Elastic Workflows 监控 Kibana 仪表板视图
  • 无人机数据分析终极指南:UAV Log Viewer 免费开源工具完整教程
  • Windows HEIC缩略图扩展:让苹果照片在PC上清晰呈现
  • Elasticsearch实战:must和filter的正确打开方式(附性能对比测试)
  • 别再用默认源了!Ubuntu22.04换源后软件下载速度提升10倍的秘密
  • 从‘蝴蝶效应’到‘自激振荡’:聊聊非线性控制系统里那些教科书不讲的有趣现象
  • MATLAB地震波批量转换反应谱程序:支持自动保存生成txt文件、目标谱匹配及IDA分析中谱加...
  • Electron应用上架Mac App Store:entitlements配置避坑指南
  • 破解BurpSuite Professional 2026.3
  • AI建站避坑指南:10个常见问题与解决方案,新手必看
  • Monorepo - 优劣、踩坑、选型 以及
  • 高效局域网通信工具:飞秋Mac版实用指南
  • 2026年喷码机怎么选?优质供应商的识别,喷码机/激光喷码机/大字符喷码机,喷码机供应商怎么选择 - 品牌推荐师
  • [Android] 应用冻结工具 雹 Hail-v1.10.0
  • 红日靶场五 WP | ThinkPHP RCE → 内核提权 → 域控沦陷
  • 2026届必备的六大AI科研网站推荐
  • 别再无脑用U-Net了!UCTransNet实战:用Transformer的通道注意力,让医学图像分割精度飙升
  • AI赋能运维:在快马平台让Kimi帮你构思和生成智能openclaw诊断脚本
  • 用于增加无线传感器网络(WSN)寿命的改进型LEACH协议附Matlab代码
  • Jetson Nano 实战:源码编译 PyCUDA 的完整指南与避坑手册
  • 当Graph神经网络遇上强化学习:用异构图建模解决动态调度难题
  • 机器人二次开发工业厂区巡检?人力省60%
  • AI数字助手,不该只属于大卖家