Настройка ошибок¶
В Zod ошибки валидации отображаются как экземпляры класса z.core.$ZodError
.
Класс
ZodError
в пакетеzod
является подклассом, который реализует некоторые дополнительные удобные методы.
Экземпляры $ZodError
содержат массив .issues
. Каждая проблема содержит удобочитаемое message
и дополнительные структурированные метаданные о проблеме.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Каждый выпуск содержит свойство message
с понятным для человека сообщением об ошибке. Сообщения об ошибках можно настраивать различными способами.
Параметр error
¶
Практически каждый API Zod принимает необязательное сообщение об ошибке.
1 |
|
Эта настраиваемая ошибка будет отображаться как свойство message
для всех проблем валидации, возникающих в этой схеме.
1 2 3 4 5 6 7 8 9 10 11 |
|
Все функции z
и методы схемы принимают пользовательские ошибки.
1 2 3 4 5 6 7 |
|
Если хотите, вы можете вместо этого передать объект params с параметром error
.
1 2 3 4 5 6 7 |
|
Параметр error
опционально принимает функцию. Функция настройки ошибок в терминологии Zod называется картой ошибок. Карта ошибок запускается во время анализа, если происходит ошибка проверки.
1 2 3 |
|
В Zod v3 были отдельные параметры для message
(строка) и errorMap
(функция). В Zod 4 они были объединены в error
.
Карта ошибок получает объект контекста, который можно использовать для настройки сообщения об ошибке в зависимости от проблемы проверки.
1 2 3 4 5 6 |
|
В сложных случаях объект iss
предоставляет дополнительную информацию, которую можно использовать для настройки ошибки.
1 2 3 4 5 6 7 8 |
|
В зависимости от используемого API могут быть доступны дополнительные свойства. Воспользуйтесь автозаполнением TypeScript, чтобы ознакомиться с доступными свойствами.
1 2 3 4 5 6 7 8 |
|
Возвращайте undefined
, чтобы избежать настройки сообщения об ошибке и вернуться к сообщению по умолчанию. (Точнее говоря, Zod передаст управление следующей карте ошибок в цепочке приоритетов.) Это полезно для выборочной настройки определенных сообщений об ошибках, но не других.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Настройка ошибок для каждого разбора¶
Чтобы настроить ошибки для каждого разбора, передайте карту ошибок в метод разбора:
1 2 3 4 5 |
|
Это имеет более низкий приоритет, чем любые настраиваемые сообщения на уровне схемы.
1 2 3 4 5 6 7 |
|
Объект iss
представляет собой дискриминированное объединение всех возможных типов проблем. Для их различения используйте свойство code
.
Подробное описание всех кодов проблем Zod см. в документации
zod/v4/core
.
1 2 3 4 5 6 7 8 9 10 11 |
|
Включение ввода в задачи¶
По умолчанию Zod не включает вводные данные в задачи. Это сделано для предотвращения непреднамеренной регистрации потенциально конфиденциальных вводных данных. Чтобы включить вводные данные в каждую задачу, используйте флаг reportInput
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Настройка глобальных ошибок¶
Чтобы указать глобальную карту ошибок, используйте z.config()
для установки параметра конфигурации Zod customError
:
1 2 3 4 5 |
|
Глобальные сообщения об ошибках имеют более низкий приоритет, чем сообщения об ошибках на уровне схемы или при разборе.
Объект iss
представляет собой дискриминированное объединение всех возможных типов проблем. Для их различения используйте свойство code
.
Подробное описание всех кодов проблем Zod см. в документации
zod/v4/core
.
1 2 3 4 5 6 7 8 9 10 11 |
|
Интернационализация¶
Для поддержки интернационализации сообщений об ошибках Zod предоставляет несколько встроенных локалей. Они экспортируются из пакета zod/v4/core
.
Обычная библиотека zod
автоматически загружает локаль en
. Zod Mini по умолчанию не загружает никаких локалей; вместо этого все сообщения об ошибках по умолчанию имеют вид Invalid input
.
1 2 3 4 |
|
Чтобы загружать локаль в режиме отложенной загрузки, рассмотрите возможность использования динамического импорта:
1 2 3 4 5 6 7 8 9 10 |
|
Для удобства все локализации экспортируются как z.locales
из "zod"
. В некоторых пакетах это может быть невозможно.
1 2 3 |
|
Локальные настройки¶
Доступны следующие локальные настройки:
ar
— арабскийaz
— азербайджанскийbe
— белорусскийca
— каталонскийcs
— чешскийde
— немецкийen
— английскийeo
— эсперантоes
— испанскийfa
— фарсиfi
— финскийfr
— французскийfrCA
— канадский французскийhe
— ивритhu
— венгерскийid
— индонезийскийit
— итальянскийja
— японскийkh
— кхмерскийko
— корейскийmk
— македонскийms
— малайскийnl
— нидерландскийno
— норвежскийota
— тюркскийps
— пуштуpl
— польскийpt
— португальскийru
— русскийsl
— словенскийsv
— шведскийta
— тамильскийth
— тайскийtr
— турецкийua
— украинскийur
— урдуvi
— вьетнамскийzhCN
— упрощенный китайскийzhTW
— традиционный китайский
Приоритет ошибок¶
Ниже приводится краткая справка по определению приоритета ошибок: если определено несколько настроек ошибок, какая из них имеет приоритет? От наивысшего к наименьшему приоритету:
-
Ошибка на уровне схемы — любое сообщение об ошибке, «жестко запрограммированное» в определении схемы.
1
z.string('Not a string!');
-
Ошибка при разборе — пользовательская карта ошибок, передаваемая в метод
.parse()
.1 2 3
z.string().parse(12, { error: (iss) => 'My custom error', });
-
Глобальная карта ошибок — настраиваемая карта ошибок, передаваемая в
z.config()
.1 2 3
z.config({ customError: (iss) => 'My custom error', });
-
Карта локальных ошибок — настраиваемая карта ошибок, передаваемая в
z.config()
.1
z.config(z.locales.en());