В основе подхода библиотеки Yup лежит представление данных через схему — декларативное описание структуры, типов и правил допустимых значений. Схема выступает не просто набором проверок, а формальной моделью, через которую проходит любое входное значение.
Схема валидации определяет:
Такой подход переносит логику проверки из императивного кода в декларативное описание, где сама структура данных становится источником истины.
Классическая проверка данных в императивном стиле строится через последовательность условий:
if (!value) throw new Error("required");
if (value.length < 3) throw new Error("too short");
Схемы валидации заменяют этот подход описанием:
import * as Yup from "yup";
const schema = Yup.string()
.required()
.min(3);
В этом случае логика проверки становится частью структуры данных. Схема начинает описывать не процесс, а результат: какие данные считаются допустимыми.
Каждая схема в Yup строится вокруг базового типа. Тип определяет фундаментальные правила интерпретации значения.
Строковая схема описывает текстовые значения:
Yup.string()
.required()
.min(5)
.max(20)
.trim();
Числовая схема работает с числовыми значениями и включает:
Yup.number()
.required()
.min(0)
.max(100)
.integer();
Булевы схемы ограничены двумя состояниями и часто используются для флагов:
Yup.boolean().required();
Объектная схема описывает состав сложных структур. Она определяет не только тип объекта, но и правила для каждого поля:
const schema = Yup.object({
name: Yup.string().required(),
age: Yup.number().min(18),
});
Ключевым свойством объектной схемы является рекурсивность: каждое поле может быть собственной схемой. Это позволяет строить глубоко вложенные структуры.
const schema = Yup.object({
user: Yup.object({
profile: Yup.object({
firstName: Yup.string().required(),
}),
}),
});
Схема становится деревом, в котором каждая ветка обладает собственной логикой валидации.
Массивы описываются через схему элемента:
Yup.array()
.of(Yup.number().min(0))
.min(1);
Такая модель задаёт единые правила для всех элементов коллекции. При этом схема массива может включать ограничения:
Одним из ключевых аспектов схем является управление отсутствием данных.
required() — значение обязательноnullable() — допускается nulldefined() — исключает undefinedЭти состояния формируют отдельный слой логики поверх типов данных.
Yup.string()
.nullable()
.required();
Схема становится механизмом управления допустимыми состояниями отсутствия значения.
Схемы не ограничиваются проверкой, они также могут трансформировать данные:
Yup.number().transform((value, originalValue) =>
String(originalValue).trim() === "" ? null : value
);
Таким образом схема становится частью этапа подготовки данных, а не только проверки.
Обработка данных через схему включает несколько этапов:
Этот процесс делает схему не просто набором правил, а конвейером обработки данных.
При нарушении правил схема возвращает структурированную информацию об ошибке:
Для вложенных объектов путь отражает структуру данных:
user.profile.firstName
Это позволяет точно локализовать источник проблемы внутри сложных структур.
Схемы могут быть переиспользуемыми и комбинируемыми. Базовые схемы выносятся в отдельные определения:
const nameSchema = Yup.string().required().min(2);
const userSchema = Yup.object({
firstName: nameSchema,
lastName: nameSchema,
});
Композиция снижает дублирование и позволяет строить единые правила для разных частей системы.
Схемы могут изменять поведение в зависимости от других значений:
Yup.string().when("isAdmin", {
is: true,
then: schema => schema.required(),
otherwise: schema => schema.notRequired(),
});
Такой механизм позволяет описывать зависимые правила без выхода за пределы декларативного подхода.
Для динамических структур используется отложенное определение:
Yup.lazy(value => {
if (typeof value === "string") {
return Yup.string();
}
return Yup.number();
});
Это позволяет адаптировать схему к форме данных во время выполнения.
Схемы могут работать в двух режимах:
Yup.number().strict(true);
В строгом режиме значение должно строго соответствовать типу без попыток преобразования.
Поведение схемы при ошибках влияет на структуру результата:
Это определяет способ анализа результата валидации и влияет на обработку данных в системе.
Схема выступает центральным элементом между входными данными и бизнес-логикой. Она:
В системах с большим количеством форм и внешних источников данных схема становится стабильной точкой контроля качества информации.