将swagger文档模型转换为相应的TS声明
前言
每次看到后端发布的swagger
文档,然后根据相关接口的响应体模型去编写对应的TS
类型时,我就不禁在想,为何不能自动根据swagger
文档模型来生成相应的TS
声明呢?这不,网上一查资料果然已经有人造起了轮子,直接开干。
方法一:swagger-to-ts
可以使用插件swagger-to-ts直接利用命令转换;该插件支持从swagger
生成的yaml
或json
配置进行转换,而且支持直接拉取网络地址的配置;
安装完npm
包后可以直接运行命令进行转换:
1 | npx @manifoldco/swagger-to-ts swagger-url -o ts-file-path.ts |
swagger-url
:swagger
文档配置网络地址或本地配置路径ts-file-path.ts
:转换后的TS
文件路径;
而且该插件还会直接使用prettier
对生成的TS
文件进行美化,且支持指定prettier
配置文件;听起来很棒,但实际上有坑,因为利用prettier
转换的过程中可能会报错,且貌似无法控制prettier
转换的开关……因此如果不符合prettier
格式要求,那就生成不了TS
文件了;
方法二:swagger官方转换器
swagger
官方有个在线编辑器,这个在线编辑器功能十分强大,不仅能够在线编辑配置并实时预览swagger
文档,还支持直接导入已有的配置(支持从网络地址导入):
导入后就可以进行swagger
模型的转换操作,其中就有一种转换方式为typescript-node
,导出后是比较通用的TS
结构;
导出的TS
效果如下:
效果还是不错的,复制粘贴改造一下就很完美了,省下很多时间逐一敲代码了。
如何找到swagger配置地址?
一般而言,后端通过swagger
自动生成文档网站然后部署,直接打开该网站,然后查看请求:
一般会有一个请求地址为xxx/swagger-doc
的请求,该地址就是获取swagger
配置json
文件的API
地址;根据这个地址就可以直接去官方编辑器进行导入操作了;
后话
使用转换工具得到的TS
声明跟实际项目中实践的方式可能会有出入,不可避免地需要进行手动调整;如果需要做到一次转换无需修改即可使用,那估计得和后端制定双方遵循的模型规范,还有高度规范化的TS
实践方式;