2

我正在使用 TypeORM,我想根据其他字段值提供不同的字段。所以解释一下,这是我的 DTO 模型的外观:

import { IsString, IsOptional, IsNumber, IsEnum, IsObject, IsBoolean, ValidateNested } from 'class-validator';

export enum AttributeTypes {
    DATE = 'DATE',
    TIME = 'TIME',
    NUMBERS = 'NUMBERS',
}

export class BaseValidation {
    @IsOptional()
    @IsBoolean()
    required: boolean;
}

export class modelCreate {
    @IsOptional()
    @IsNumber()
    id: number;

    @IsOptional()
    @IsString()
    label: string;

    @IsOptional()
    @IsEnum(AttributeTypes)
    type: AttributeTypes;

    @IsOptional()
    @IsObject()
    @ValidateNested()
    validation: BaseValidation;
}

这里的问题是我有这个字段: modelCreate中的验证,并且该字段是一个对象,可以有多个属性,并且在db中看起来像这样:

validation: {
   required: true,
   text: 2
}

或者看起来像这样:

   validation: {
       required: false,
       number: 1,
       maxNumber: 10
    }

这取决于modelCreate的类型属性,因为如果类型是'TIME',我想对此进行验证:

BaseValidation {
    @IsBoolean()
     required: true,
    @IsString()
    text: 2
}

如果类型是'NUMBERS',我想有这样的验证

  BaseValidation {
           @IsBoolean()
           required: boolean,
           @IsNumber()
           number: number,
           @IsNumber()
           maxNumber: number
        }

所以问题是我将如何根据类验证器中的类型字段值在验证字段中调整不同的类,这甚至可能吗?

4

1 回答 1

3

为此,您需要为每种情况、字符串和数字创建 2 个类。然后更改类型validation: StringBaseValidation | NumberBaseValidation;现在class-validator可以区分情况。

如果数据来自请求,您需要使用它@Type((obj) => obj.writeConditionToDetectString ? StringBaseValidation : NumberBaseValidation)来帮助库了解请求中的数据是哪种类型。

于 2020-04-08T05:47:11.023 回答