契机
- 之前关注到 trpc 这个项目,觉得类型推导的方式非常天才,但它并不支持 RESTful APIs
- 喜欢 KoaJS 的理念,但它需要 mutate context (
ctx.body = {}),同时感觉社区活跃度在下降 - 不管是 KosJS 还是 ExpressJS 都是纯 JavaScript 开发,实际使用中与 TypeScript 结合总有别扭之处
- TypeScript 日益强大,并且原生 fetch 等功能逐渐稳定并普及
结果
考虑到 RESTful 的兼容性和强类型带来的好处,花了几天研究了一下 KoaJS 的源码,并做了一些类型体操后弄出了一个 POC (proof of concept):
https://github.com/withtyped/withtyped
效果如图:

一些亮点
- 还是 RESTful API ,熟悉的配方
- 用任意工具 guard 请求输入 (path params, query, body) 和输出 (response)
- 写 API 送强类型客户端
- 零依赖,原生就好
- 自动生成 OpenAPI (Swagger) 接口
细节
写一个接口可以自动根据路径推导参数:


根据定义的返回值类型限制调用类型:

在客户端一切都能自动推导:



仅需一个函数生成 OpenAPI 接口:
router.withOpenApi()
结尾
项目尚处实验阶段,还请大家拍砖

