Объект ValidationError является центральной структурой,
через которую библиотека формирует результат валидации. Он описывает как
сам факт ошибки, так и контекст, в котором она возникла, включая
вложенные ошибки при работе с объектами сложной структуры.
Каждый экземпляр ValidationError представляет собой
объект со следующей логической структурой:
target: object
Ссылка на исходный объект, который проходил валидацию.
Особенности:
Пример смысла:
{
target: UserDto
}
property: string
Имя свойства объекта, в котором обнаружена ошибка.
Особенности:
children для построения
иерархииvalue: any
Фактическое значение, которое не прошло проверку.
Особенности:
undefinedconstraints?: { [type: string]: string }
Ключевая структура, содержащая описание нарушенных правил валидации.
Формат:
Пример:
{
isEmail: "email must be an email",
isNotEmpty: "email should not be empty"
}
Особенности:
ValidationError может содержать несколько
нарушений@IsEmail(),
@IsNotEmpty() и т.д.)children: ValidationError[]
Массив вложенных ошибок для объектов и структур с вложенной валидацией.
Используется когда:
@ValidateNested()Структура:
children: [
ValidationError,
ValidationError
]
Особенности:
ValidationErrorПример иерархии:
user
└── address
└── city
contexts?: { [type: string]: any }
Дополнительные данные, переданные кастомными валидаторами.
Используется в:
ValidatorConstraint)Особенности:
Пример:
contexts: {
minLength: { expected: 5, actual: 3 }
}
ValidationError строится как дерево:
children раскрывают вложенные структурыСхема:
ValidationError
├── property
├── constraints
├── value
└── children[]
└── ValidationError
└── children[]
Такой подход позволяет:
Типичная структура результата:
[
{
target: {
email: "test",
profile: {
age: -1
}
},
property: "email",
value: "test",
constraints: {
isEmail: "email must be an email"
},
children: []
},
{
target: {
email: "test",
profile: {
age: -1
}
},
property: "profile",
value: {
age: -1
},
constraints: undefined,
children: [
{
property: "age",
value: -1,
constraints: {
min: "age must not be less than 0"
},
children: []
}
]
}
]
Если свойство не проходит валидацию на уровне структуры:
value может быть undefinedconstraints содержит ошибки обязательности
(isDefined, isNotEmpty)children часто отсутствуетПример:
{
property: "password",
value: undefined,
constraints: {
isNotEmpty: "password should not be empty"
}
}
Корневой уровень:
Вложенный уровень:
Полный путь формируется внешними механизмами обработки, а не самим
ValidationError.
constraints формируется на основании активных
валидаторов:
Типичный набор:
isEmaillengthminmaxisNotEmptymatchesПри преобразовании в JSON:
target может сериализоваться частично в зависимости от
содержимогоРезультат используется:
При валидации массивов:
ValidationErrorpropertychildrenПример логики:
items -> children[0], children[1]
При использовании @ValidateNested():
ValidationError для вложенного
объектаchildren родительского узлаtargetpropertyvalueconstraintschildrencontexts