Zod уделяет особое внимание полноте и правильности отчетов об ошибках. Во многих случаях полезно преобразовать $ZodError в более удобный формат. Zod предоставляет для этого несколько утилит.
В результате получается вложенная структура, которая отражает саму схему. Вы можете легко получить доступ к ошибкам, которые произошли на определенном пути. Поле errors содержит сообщения об ошибках на данном пути, а специальные свойства properties и items позволяют вам продвигаться глубже в дерево.
12345
tree.properties?.username?.errors;// => ["Invalid input: expected string, received number"]tree.properties?.favoriteNumbers?.items?.[1]?.errors;// => ["Invalid input: expected number, received string"];
Обязательно используйте опциональное цепочечное соединение (?.) для предотвращения ошибок при доступе к вложенным свойствам.
Функция z.prettifyError() предоставляет удобочитаемое строковое представление ошибки.
1
constpretty=z.prettifyError(result.error);
Это возвращает следующую строку:
12345
✖ Unrecognized key: "extraKey"
✖ Invalid input: expected string, received number
→ at username
✖ Invalid input: expected number, received string
→ at favoriteNumbers[1]
В результате получается вложенная структура, которая отражает саму схему. Вы можете легко получить доступ к ошибкам, которые произошли на определенном пути.
12345
formatted?.username?._errors;// => ["Invalid input: expected string, received number"]formatted?.favoriteNumbers?.[1]?._errors;// => ["Invalid input: expected number, received string"]
Обязательно используйте опциональное цепочечное соединение (?.) для предотвращения ошибок при доступе к вложенным свойствам.
Хотя z.treeifyError() полезен для обхода потенциально сложной вложенной структуры, большинство схем являются плоскими — всего одного уровня глубины. В этом случае используйте z.flattenError() для получения чистого, неглубокого объекта ошибки.