我需要通过类验证器使用一个接口来验证传入表单中请求正文中的特定字段。
接口:
export enum Fields {
Full_Stack_Dev = 'full stack dev',
Frontend_Dev = 'frontend dev',
Backend_Dev = 'backend dev',
}
export interface Experience {
field: Fields;
years: number;
}
这是DTO
类:
@IsEnum(Languages)
languages: Languages[];
experience: Experience[]; // 👈 Not sure which decorator to use for interfaces
好了,在做了大量的研究之后,我找到了一个解决方法:
首先,接口不能直接使用。由类验证器在这里正式声明
我是这样做的:
- 将接口更改为单独的类并添加了对其属性 的验证
class ExperienceDto {
@IsEnum(Fields)
field: Fields;
@IsNumber()
years: number;
}
- 然后使用这个类作为类型来验证实际DTO类中的对象数组(不是上面那个)
@ArrayNotEmpty()
@ArrayMinSize(1)
@ArrayMaxSize(3)
@ValidateNested({ each: true })
@Type(() => ExperienceDto) // imported from class-transformer package
experience: ExperienceDto[];