Библиотека YupResolver выступает связующим звеном между схемой валидации, построенной на Yup, и механизмами управления формами, чаще всего используемыми через React Hook Form. Основой корректной работы схем становятся базовые типы данных, поскольку именно они определяют структуру входных значений, правила преобразования и поведение валидатора при получении данных из формы.
Строгая типизация на уровне схемы позволяет формировать предсказуемую модель данных, в которой каждое поле заранее описано с точки зрения типа, ограничений и допустимых значений. В контексте YupResolver эти определения напрямую влияют на результат валидации и формат ошибок, возвращаемых в форму.
Строковые поля являются наиболее часто используемым типом в схемах
Yup. Они определяются через yup.string() и представляют
собой базовый контейнер для текстовых данных.
Ключевые особенности строковых типов:
required()min() и max()matches()Строковая схема часто используется для полей имени, email, пароля, комментариев и любых текстовых данных, поступающих из пользовательского ввода.
Пример логики поведения:
required() считается
ошибкойnull или undefined требует явной
обработки через nullable() или optional()YupResolver при обработке строковых схем передаёт результат в форму в виде структурированных ошибок, связанных с конкретным полем, без изменения исходного типа данных.
Числовой тип определяется через yup.number() и
используется для обработки количественных данных, таких как возраст,
цена, рейтинг, количество элементов.
Особенности числовых схем:
NaN как на невалидное значениеmin() и
max()integer()Типичная проблема при работе с числовыми данными связана с тем, что пользовательский ввод из HTML-форм всегда приходит в виде строки. Yup пытается преобразовать такие значения, но при невозможности преобразования формируется ошибка валидации.
YupResolver фиксирует результат преобразования и передаёт либо корректное число, либо сообщение об ошибке, связанное с типом или диапазоном.
Булевый тип задаётся через yup.boolean() и используется
для флагов состояния: чекбоксов, переключателей, согласий.
Особенности обработки:
true, false, либо
undefinedfalse,
если не задано иное поведениеoneOf([true]), например для обязательного согласияБулевы поля важны в формах с юридическими подтверждениями, настройками и переключателями функционала.
При использовании YupResolver булевое значение сохраняет свой тип без преобразования, но может проходить через стадию нормализации в зависимости от источника данных формы.
Дата описывается через yup.date() и предназначена для
работы с объектами Date.
Ключевые аспекты:
Invalid Datemin() и max()При работе с формами дата часто поступает в виде строки ISO или
локального формата. Yup пытается интерпретировать такие значения в
объект Date, после чего применяется валидация.
YupResolver возвращает либо корректный объект Date, либо
ошибку, связанную с невозможностью преобразования или нарушением
ограничений диапазона.
Массивы определяются через yup.array() и представляют
собой структуру для хранения списков однотипных или сложных
значений.
Особенности массивов:
of()min() и max()Массивы часто используются для чекбоксов с множественным выбором, списков тегов, динамических форм.
Поведение YupResolver в случае массивов заключается в рекурсивной проверке каждого элемента и агрегировании ошибок по индексам массива, что позволяет точно локализовать проблему внутри структуры данных.
Объектные схемы задаются через yup.object() и
представляют основную структуру формы.
Особенности:
shape({})partial() в
комбинации с TypeScriptОбъекты позволяют формировать сложные модели данных, включая адреса, профили пользователей, настройки.
YupResolver при обработке объектов сохраняет иерархию ошибок,
привязывая каждую ошибку к конкретному пути в структуре, например
user.address.city.
Тип mixed() используется для значений, которые не имеют
строго определённого типа или могут изменяться динамически.
Особенности:
test()Mixed часто применяется как базовый уровень для кастомных схем, где стандартные типы Yup оказываются недостаточными.
YupResolver передаёт такие значения без жёсткого преобразования, полагаясь на пользовательскую логику схемы.
Механизмы nullable() и optional()
определяют поведение отсутствующих значений.
nullable() допускает значение nulloptional() допускает undefinedЭти модификаторы критически важны при работе с API, где отсутствие значения может иметь разные семантические значения.
YupResolver учитывает эти настройки при формировании итогового результата валидации, не создавая ошибок там, где схема явно допускает отсутствие данных.
Ограниченные множества значений реализуются через
oneOf() и yup.mixed().oneOf([...]).
Особенности:
Такие схемы применяются для ролей пользователей, статусов заказов, фиксированных категорий.
YupResolver возвращает ошибку при любом отклонении от заданного набора, не выполняя автоматических преобразований.
В реальных схемах базовые типы редко используются изолированно. Чаще формируется комплексная структура, где:
Такое сочетание позволяет описывать форму как строгую структуру данных, а не просто набор полей ввода.
При интеграции с YupResolver схема проходит этап интерпретации, на котором:
Тип данных влияет не только на валидацию, но и на то, как результат будет представлен в форме: строка остаётся строкой, число преобразуется, дата становится объектом, массив сохраняет структуру элементов.
Yup позволяет выводить TypeScript-типы на основе схем, что обеспечивает синхронизацию между схемой и моделью данных.
Основные аспекты:
InferTypeВ связке с YupResolver это создаёт единый слой контроля типов и правил, где схема выступает источником истины для структуры данных формы.