从TypeScript接口生成Swagger文档。

18

我正在使用swager-jsdoc记录应用程序的所有DTO。

我想知道是否有办法从typescript接口自动生成swagger文档。

项目中有很多这样的接口和mongoose模式和模型,保持同步变得非常繁琐。另一方面,我不想使用swagger生成工具。我更喜欢自下而上的方法。

干杯


发现了一个相关的问题,但是是关于从TypeScript接口生成Mongoose模式。一箭双雕岂不美哉。 - Adrian Moisa
1
发现了typegoose,这解决了一半的问题:D 仍在寻找swagger的对应方案。 - Adrian Moisa
3个回答

6
另一个选择是 tsoarouting-controllersrouting-controllers-openapi。两者的主要区别(据我所知)在于 tsoa 依赖于代码生成,而 routing-controllers 完全在运行时操作。这两种方法都有其优点:tsoa 能够使用更丰富的元数据(例如代码注释),而使用 routing-controllers,我们可以跳过生成步骤。我的建议是两个都试试!另外还有一个选项是 typescript-json-schema,它可以从 Typescript 接口生成 JSON Schema;在你使用 JSON Schema 定义了模型之后,你离 OpenAPI 规范并不遥远。

请注意,TSOA目前不支持特定路由中间件。此外,routing-controllers-openapi似乎没有TSOA功能丰富。 - Nikos

4
是的,你可以通过使用tsoa从你的TypeScript类型轻松生成Swagger和OpenAPI文档。readme文件包含了所有设置信息,让你能够开始使用它。它与express、hapi、koa等框架兼容。

https://github.com/lukeautry/tsoa


(完全透明:我曾经是tsoa的维护者之一。但首先,我是tsoa的用户,我觉得它是一个很棒的产品...这就是为什么我要求帮助维护它!:))我现在已经退居幕后了,但新的维护者们非常棒!

为什么tsoa目前不支持路由特定的中间件?此外,是否有解决这个问题的特定功能的方法? - Andrew Miracle
这是一个更适合作为tsoa的github问题的功能请求的问题。但简短的答案是类型安全。在他们的github上问tsoa的新维护者,你可能会得到不同的答案。 - GreeneCreations
@GreeneCreations 我可以在Lambda代理事件中使用TSOA吗? - undefined
@GreeneCreations 我可以在Lambda代理事件中使用TSOA吗? - Gowsik
@GowsikKC,我不知道。 - GreeneCreations

2
另一个选择是使用 https://www.npmjs.com/package/ts-to-openapi 从接口生成 Swagger Schemas。

例如:考虑下面的 User 接口:

export interface User {
  name: string;
  email: string;
  nickname?: string;
}

在终端中运行以下命令:

npx ts-to-openapi -f User.ts -t User >> User.ts

完成后,您的用户界面将更新如下:
export interface User {
  name: string;
  email: string;
  nickname?: string;
}

/**
 * @swagger
 * components:
 *   schemas:
 *     User:
 *       additionalProperties: false
 *       properties:
 *         email:
 *           type: string
 *         name:
 *           type: string
 *         nickname:
 *           type: string
 *       required:
 *         - name
 *         - email
 *       type: object
 */

3
ts-to-openapipackage已经“不再得到大力维护”,该项目页面指向更活跃和全面的typeconv包,该包支持的不仅仅是ts/openAPI生成。 - Patrick Fowler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接