В библиотеке Joi тип boolean() используется для описания
и проверки логических значений. Он обеспечивает строгую или гибкую
валидацию данных, которые должны интерпретироваться как
true или false, включая возможность приведения
типов из строк и чисел.
Схема Joi.boolean() предназначена для проверки значений,
которые должны быть логическими. Основная задача — гарантировать, что
входные данные представляют собой корректное булево значение или могут
быть приведены к нему по заданным правилам.
Базовая форма:
Joi.boolean()
В этом виде допускаются стандартные булевы значения true
и false, а также значения, которые библиотека может
интерпретировать как логические.
По умолчанию схема boolean() выполняет приведение типов
(coercion). Это означает, что входные данные могут автоматически
преобразовываться в логические значения.
Примеры типичного поведения:
Joi.boolean().validate(true) // true
Joi.boolean().validate(false) // false
Joi.boolean().validate('true') // true
Joi.boolean().validate('false') // false
Joi.boolean().validate(1) // true
Joi.boolean().validate(0) // false
Такое поведение делает схему удобной для обработки данных из HTTP-запросов, где булевы значения часто приходят в виде строк.
Режим строгой проверки отключает приведение типов. В этом случае допустимы только реальные булевы значения JavaScript.
Joi.boolean().strict()
Поведение:
Joi.boolean().strict().validate(true) // true
Joi.boolean().strict().validate('true') // ошибка
Joi.boolean().strict().validate(1) // ошибка
Строгий режим используется в системах, где критична типовая целостность данных, например при работе с внутренними сервисами или конфигурациями.
По умолчанию библиотека использует встроенные правила преобразования:
true → truefalse → false"true" → true"false" → false1 → true0 → falseДополнительно можно расширить набор значений через
truthy() и falsy().
Методы truthy() и falsy() позволяют
определить собственные правила интерпретации значений.
Joi.boolean().truthy('yes', 'on', 1)
Теперь значения:
"yes" → true"on" → true1 → trueJoi.boolean().falsy('no', 'off', 0)
Теперь значения:
"no" → false"off" → false0 → falseКомбинация этих методов используется для обработки нестандартных API или форм ввода, где логика представлена текстовыми маркерами.
Булево поле может быть обязательным или опциональным.
Joi.boolean().required()
или
Joi.boolean().optional()
Поведение:
required() — значение должно присутствоватьoptional() — значение может отсутствоватьОтсутствие значения при required() приводит к ошибке
валидации.
Для булевых схем часто задаются значения по умолчанию:
Joi.boolean().default(false)
Если значение отсутствует, оно автоматически заменяется на
false.
Пример:
Joi.boolean().default(true)
При отсутствии входного значения результат будет
true.
При несоответствии типу возникает ошибка валидации. Типичные случаи:
truthy / falsyПример кастомизации сообщений:
Joi.boolean().messages({
'boolean.base': 'Значение должно быть логическим'
})
Булевы значения часто применяются в конфигурационных объектах:
const schema = Joi.object({
debug: Joi.boolean().default(false),
cache: Joi.boolean().default(true)
})
При обработке запросов:
const schema = Joi.object({
isActive: Joi.boolean(),
isAdmin: Joi.boolean()
})
Значения могут приходить как строки:
"true""false"10В формах булевы значения часто представлены чекбоксами:
const schema = Joi.object({
agreeTerms: Joi.boolean().valid(true).required()
})
Такое ограничение гарантирует, что пользователь подтвердил действие.
При интеграции с внешними системами полезно расширять допустимые значения:
const schema = Joi.boolean()
.truthy('Y', 'yes')
.falsy('N', 'no')
Это позволяет унифицировать данные, поступающие из различных источников.
Булевый тип в Joi обладает рядом особенностей, которые важно учитывать:
truthy/falsynull не считается булевым без дополнительной
настройкиИспользование boolean() становится предсказуемым только
при явном определении правил преобразования, особенно в системах с
неоднородными источниками данных.