将swagger文档模型转换为相应的TS声明

前言

每次看到后端发布的swagger文档,然后根据相关接口的响应体模型去编写对应的TS类型时,我就不禁在想,为何不能自动根据swagger文档模型来生成相应的TS声明呢?这不,网上一查资料果然已经有人造起了轮子,直接开干。

方法一:swagger-to-ts

可以使用插件swagger-to-ts直接利用命令转换;该插件支持从swagger生成的yamljson配置进行转换,而且支持直接拉取网络地址的配置;

安装完npm包后可以直接运行命令进行转换:

1
npx @manifoldco/swagger-to-ts swagger-url -o ts-file-path.ts
  • swagger-urlswagger文档配置网络地址或本地配置路径
  • ts-file-path.ts:转换后的TS文件路径;

而且该插件还会直接使用prettier对生成的TS文件进行美化,且支持指定prettier配置文件;听起来很棒,但实际上有坑,因为利用prettier转换的过程中可能会报错,且貌似无法控制prettier转换的开关……因此如果不符合prettier格式要求,那就生成不了TS文件了;

img

方法二:swagger官方转换器

swagger官方有个在线编辑器,这个在线编辑器功能十分强大,不仅能够在线编辑配置并实时预览swagger文档,还支持直接导入已有的配置(支持从网络地址导入):

img

导入后就可以进行swagger模型的转换操作,其中就有一种转换方式为typescript-node,导出后是比较通用的TS结构;

img

导出的TS效果如下:

img

效果还是不错的,复制粘贴改造一下就很完美了,省下很多时间逐一敲代码了。

如何找到swagger配置地址?

一般而言,后端通过swagger自动生成文档网站然后部署,直接打开该网站,然后查看请求:

img

一般会有一个请求地址为xxx/swagger-doc的请求,该地址就是获取swagger配置json文件的API地址;根据这个地址就可以直接去官方编辑器进行导入操作了;

img

后话

使用转换工具得到的TS声明跟实际项目中实践的方式可能会有出入,不可避免地需要进行手动调整;如果需要做到一次转换无需修改即可使用,那估计得和后端制定双方遵循的模型规范,还有高度规范化的TS实践方式;

相关文档