3 回答
TA贡献1836条经验 获得超4个赞
由于 TypeScript 不存储有关泛型或接口的元数据,因此当您在 DTO 中使用它们时,SwaggerModule 可能无法在运行时正确生成模型定义。
嗯,这是有道理的。
在某些特定场景中(例如深度嵌套的数组、矩阵),您可能希望手动描述您的类型。
因此,对我有用的最终设置如下
创建没有类型的 DTO,但匹配类型/接口结构,就像原始问题中的“预期结果”一样
请求/响应应使用 dto 键入,例如
Result<SomeDto>
当您在该函数中处理数据时,请使用 interface/type 键入它,而不是 dto 并进行交叉检查。
像这个数据是有效的,swagger 是正确生成的。有关其他招摇信息,请直接在 DTO 中使用装饰器。
TA贡献2016条经验 获得超9个赞
您可以使用OpenAPI CLI 插件在 Swagger 中自动显示类型。
添加:
"compilerOptions": {
"plugins": ["@nestjs/swagger"]
}
,nest-cli.json并添加:
import { ApiProperty, ApiBody } from '@nestjs/swagger';
到您的每个 DTO,插件将自动注释和记录您的模式!
TA贡献1744条经验 获得超4个赞
根据 类型和参数的文档, 您只需要使用
@Body(), @Query(), @Param()
然后 swagger 模块将自动为您填充内容。这还要求您将nest-cli.json文件更新为
{
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": ["@nestjs/swagger/plugin"]
}
}
那么所有的事情都应该为你完成并生成。
只是提醒一下,如果这没有自动显示它们或显示架构为空,那么您至少装饰 dto 的一个条目,@ApiProperty()然后刷新页面。这将完成任务。
添加回答
举报