check
Своя синхронная проверка. Функция возвращает true, если значение валидно.
Сигнатура
ts
function check<T>(fn: (value: T, info: Info) => boolean, msg?: Message): Action<T>
interface Info {
parent: unknown; // объект, в котором лежит поле (исходные данные)
root: unknown; // все данные, переданные в validate
}Параметры
| Параметр | Тип | Описание |
|---|---|---|
fn | (value: T, info: Info) => boolean | Проверка. value — уже проверенное и преобразованное значение |
msg | Message | Своё сообщение об ошибке. Строка с {параметрами} или функция |
Коды ошибок
| Код | Когда | Сообщение по умолчанию |
|---|---|---|
invalid | fn вернула false | Invalid value |
Тексты можно поменять: см. Сообщения и локализация.
Особенности
- Чтобы переиспользовать проверку, оберните её в функцию — см. Свои правила и схемы.
- Для запросов к базе или API —
checkAsync. - Исключение внутри
fnне превращается в ошибку валидации, а пробрасывается.
Примеры
Совершеннолетие
ts
const adult = check<Date>((birth) => {
const d = new Date();
d.setFullYear(d.getFullYear() - 18);
return birth <= d;
}, 'Только для 18+');
object({ birthday: pipe(coerce.date(), adult) });Зависимость от другого поля
ts
object({
delivery: oneOf(['pickup', 'courier']),
address: optional(pipe(string(), check((v, { parent }) => parent.delivery === 'courier', 'Адрес нужен только для курьера'))),
});