typescript NestJS强制主体参数为基于类型的值

gab6jxml  于 2023-01-14  发布在  TypeScript
关注(0)|答案(1)|浏览(113)

首先,我问这个问题只是因为我没有找到一个适合这个案例的答案。而且我刚刚开始学习NestJS。
本人声明如下:

// Type definition of options
type Gender = "Male" | "Female";

// DTO
export class User {
    ...
    gender: Gender;
}

// Inside controller
...
@Post()
registerUser(@Body() data: User) {
    console.log(data.gender);
}
...

不幸的是,如果它在body中将gender设置为“Unknown”,它将是data.gender的值,即使它不在允许的值区间内。我想将值限制为类型定义中可用的值。我看过如何在枚举中执行此操作的示例,但没有类型示例。是否可以使用类型来限制它们?

zbq4xfa0

zbq4xfa01#

npm i -保存类验证器类转换器
在main.ts中进行更改

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());  <= add this
  await app.listen(3000);
}
bootstrap();

就像这样

import { IsDefined, IsIn, IsNotEmpty } from 'class-validator';

// DTO
export class User {
    ...

    @IsDefined()
    @IsNotEmpty()
    @IsIn(['Male','Female'])
    gender: Gender;
}

// Inside controller
...
@Post()
registerUser(@Body() data: User) {
    console.log(data.gender);
}
...

相关问题