Булевый тип в Yup используется для валидации значений, которые должны
строго соответствовать логическому типу boolean. Несмотря
на кажущуюся простоту, работа с булевыми значениями в реальных формах и
API требует учёта множества нюансов: преобразование строковых значений,
обработка неопределённых состояний, поведение чекбоксов, строгая
типизация и кастомные правила.
В Yup булевый тип создаётся через фабричный метод:
import * as yup from 'yup';
const schema = yup.boolean();
Данная схема принимает только два валидных значения:
truefalseЛюбое отклонение от этих значений рассматривается как нарушение типа, если не включены дополнительные преобразования.
Одной из ключевых особенностей Yup является автоматическое приведение
типов. При включённой стандартной конфигурации библиотека пытается
интерпретировать входные данные и привести их к
boolean.
Часто данные поступают в виде строк:
schema.cast("true"); // true
schema.cast("false"); // false
Также учитываются числовые представления:
schema.cast(1); // true
schema.cast(0); // false
Однако поведение может зависеть от версии и конфигурации схемы, поэтому в строгих сценариях рекомендуется явно контролировать допустимые значения.
При включении строгого режима отключается автоматическое преобразование типов:
const schema = yup.boolean().strict();
В этом режиме:
"true" не будет преобразовано в true1 не будет преобразовано в trueЭто особенно важно при работе с API, где требуется гарантированная типовая целостность.
Булевый тип по умолчанию допускает undefined, если не
указано обратное.
const schema = yup.boolean().required();
В таком случае:
true — допустимоfalse — допустимоundefined — ошибка валидацииВажно учитывать, что required() проверяет наличие
значения, но не запрещает false, так как это валидное
булево значение.
Для строгого контроля допустимых состояний используется метод
oneOf:
const schema = yup.boolean().oneOf([true]);
Такой вариант часто применяется для чекбоксов согласия:
false — ошибкаconst schema = yup.boolean().oneOf([false]);
Используется реже, но может применяться для инверсных флагов.
Булевый тип поддерживает установку дефолтного значения:
const schema = yup.boolean().default(false);
При отсутствии значения:
falseЕсли значение приходит явно, дефолт игнорируется.
По умолчанию null не считается валидным значением:
const schema = yup.boolean();
schema.validateSync(null); // ошибка
Разрешение null:
const schema = yup.boolean().nullable();
В этом случае:
true — допустимоfalse — допустимоnull — допустимоРазница между null и undefined
критична:
undefined чаще означает отсутствие поляnull — явно заданное пустое значениеПри несоответствии типа используется стандартное сообщение, которое можно переопределить:
const schema = yup.boolean().typeError('Ожидается логическое значение');
Также можно задавать индивидуальные сообщения для конкретных правил:
const schema = yup
.boolean()
.oneOf([true], 'Необходимо подтвердить условие');
Булевый тип наиболее часто применяется в связке с UI-элементами:
Пример схемы:
const schema = yup.object({
termsAccepted: yup.boolean().oneOf([true]),
newsletter: yup.boolean().default(false),
});
Особенность HTML-форм заключается в том, что:
undefinedtrueПоэтому required() без oneOf([true]) часто
недостаточен для логики согласия.
Без required() и default() поведение
выглядит следующим образом:
undefinedЭто важно учитывать при валидации частичных форм и PATCH-запросов.
Для более сложной логики используется метод test:
const schema = yup.boolean().test(
'is-true-check',
'Значение должно быть истинным',
(value) => value === true
);
Такой подход позволяет реализовать:
Метод transform позволяет явно контролировать приведение
значений:
const schema = yup.boolean().transform((value, originalValue) => {
if (originalValue === 'yes') return true;
if (originalValue === 'no') return false;
return value;
});
Это полезно при работе с нестандартными API, где boolean кодируется строками или нестандартными флагами.
yup.boolean().oneOf([true]).required();
yup.boolean().default(false);
yup.boolean().nullable();
yup.boolean().strict().required();
При вложении в object булевы поля наследуют поведение
корневой схемы:
const schema = yup.object({
isActive: yup.boolean().default(true),
});
При отсутствии значения:
truedefaultВ массивах булевы значения проходят индивидуальную валидацию:
yup.array().of(yup.boolean());
required() вместо
oneOf([true]) для чекбоксов согласияnull и
undefineddefault при логических флагах, что приводит
к undefined в состоянии формыПри включённом кастинге Yup интерпретирует входные значения:
"true" → true"false" → false1 → true0 → falsefalse или
undefined в зависимости от контекстаЭто поведение важно учитывать при интеграции с формами, особенно при использовании библиотек вроде Formik или React Hook Form.
Булевый тип часто комбинируется с:
when() — условная логикаmixed() — расширенные типыobject() — вложенные структурыПример условной логики:
yup.object({
isEnabled: yup.boolean(),
value: yup.string().when('isEnabled', {
is: true,
then: yup.string().required(),
}),
});
Такая конструкция позволяет строить зависимые формы, где булево значение управляет обязательностью других полей.