Могу ли я указать порядок выполнения декораторов валидации с помощью класса-валидатора? - PullRequest
0 голосов
/ 04 августа 2020

Допустим, у человека есть класс Post, который нужно проверить.

export class Post {
  @IsArray()
  tags: string[];
}

Давайте теперь предположим, что он хочет убедиться, что слово «ошибка» никогда не появляется в tags поле. Для этого он пишет собственный декоратор проверки:

export function NoMistakes (validationOptions?: ValidationOptions) {
  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: 'noMistakes',
      target: object.constructor,
      propertyName: propertyName,
      options: validationOptions,
      validator: {
        validate (tags: any, args: ValidationArguments) {
          tags.forEach(tag => { 
            if (tag == 'mistake) {
              return false
           }
        })
        return true
      }
    })
  }
}

Теперь он переписывает Post следующим образом:

export class Post {
  @IsArray()
  @NoMistakes()
  tags: string[];
}

Проблема возникает, например, когда теги не из наберите int. В этом случае в пользовательском валидаторе возникает ошибка при попытке перебрать что-то, не являющееся массивом.

Как можно выполнить валидатор @IsArray перед пользовательским валидатором? В общем, есть ли способ выбрать порядок проверок?

...