如何让TSOA忽略Swagger中生成的Pick/Partial/Omit类型Schema?
解决TSOA生成Pick/Partial/Omit冗余Schema的问题
方法1:用@Hidden()装饰器标记工具类型
在定义Pick/Partial/Omit这类工具类型时,给对应的类型加上@Hidden()装饰器,让TSOA跳过该类型的Schema生成。
示例代码:
import { Hidden } from 'tsoa'; @Hidden() type PickUserContact = Pick<User, 'email' | 'phoneNumbers'>; // 路由中使用该类型时,不会生成PickUserContact对应的Schema
方法2:在TSOA配置文件中批量排除
修改tsoa.json(或tsoa.config.ts),添加ignore字段,用正则匹配自动生成的工具类型命名(比如Pick_、Partial_、Omit_前缀),批量忽略这类冗余Schema:
{ "swagger": { "outputDirectory": "./dist", "entryFile": "./src/server.ts" }, "routes": { "routesDir": "./dist/routes" }, "ignore": [ "Pick_.*", "Partial_.*", "Omit_.*" ] }
方法3:内联使用工具类型(避免单独命名)
如果不需要复用工具类型,直接在路由的参数或返回值中内联使用Pick/Partial/Omit,TSOA会直接基于原类型生成合并后的Schema,不会额外生成工具类型对应的独立Schema。
示例代码:
// 不要单独定义PartialUser类型 // type PartialUser = Partial<User>; // 直接在路由中内联使用 @Patch('/users/:id') public async updateUser( @Path() id: string, @Body() userData: Partial<User> ): Promise<User> { // 业务逻辑 }
内容的提问来源于stack exchange,提问作者Thore
相关产品推荐
相关产品推荐

