ZodError — центральный объект, через который библиотека
Zod возвращает информацию о неуспешной валидации данных. Он агрегирует
все найденные нарушения схемы и предоставляет как «сырое» представление
ошибок, так и инструменты для их преобразования в удобные структуры.
Основная идея ZodError заключается в том, что одна
ошибка не является единичным событием: при проверке сложных объектов
может возникать множество нарушений одновременно, и все они собираются в
единый контейнер.
Объект ZodError имеет несколько ключевых полей:
"ZodError",
идентификатор типа ошибкиZodIssue,
содержащий все ошибки валидацииГлавная часть структуры — это issues, поскольку именно
она содержит полную информацию о каждом нарушении схемы.
issues представляет собой массив, где каждый элемент
описывает конкретную проблему валидации.
Каждый элемент массива — это объект ZodIssue, который
содержит:
Дополнительно некоторые типы ошибок могут содержать расширенные поля (например, для union-ошибок или строковых ограничений).
path — один из наиболее важных элементов структуры
ZodIssue.
Он представляет собой массив ключей, описывающих путь к проблемному значению в исходных данных.
Примеры структуры path:
[] — ошибка на корневом уровне["user"] — ошибка внутри объекта user["user", "email"] — ошибка в поле email
объекта user["items", 2, "price"] — ошибка внутри массива на
конкретной позицииТаким образом, path позволяет точно локализовать
проблему в глубоко вложенных структурах.
Поле code определяет тип нарушения. Оно позволяет
программно различать виды ошибок без анализа текста сообщения.
Наиболее распространённые значения:
Каждый code определяет набор дополнительных полей в
ZodIssue.
Содержит:
Пример логики:
"string""number"Содержат:
string, number,
array)Используется при проверке форматов строк:
email, url,
uuid, regex и т.д.)Пользовательские ошибки через refine или
superRefine:
Содержит:
ZodError для каждой неудачной
ветки unionЭто один из самых сложных типов ошибок, так как он включает вложенные
структуры ZodError.
Одной из ключевых особенностей ZodError является
рекурсивность.
ZodError может содержать внутри себя другие
ZodError через:
Это позволяет строить дерево ошибок, отражающее структуру валидируемого объекта.
Метод format() преобразует массив issues в
вложенный объект, где структура повторяет исходные данные.
Особенности:
Пример логики результата:
user:
Метод flatten() упрощает структуру ошибки до двух
частей:
Особенности:
Поле message в ZodError формируется
автоматически как объединение всех сообщений из issues.
Оно:
При использовании строгих схем:
Это делает ZodError детализированным источником
диагностики.
Комбинация path + issues позволяет:
Глубина вложенности не ограничена, что особенно важно для сложных схем объектов и массивов.
Структурно объект можно представить так:
ZodError
issues[]
ZodIssue
methods:
ZodError является финальным агрегатором всех проверок,
выполняемых схемой. Он:
Его структура ориентирована на точную диагностику и последующую обработку в прикладной логике без потери информации о происхождении ошибки.