Skip to content

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 — уже проверенное и преобразованное значение
msgMessageСвоё сообщение об ошибке. Строка с {параметрами} или функция

Коды ошибок ​

КодКогдаСообщение по умолчанию
invalidfn вернула falseInvalid 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', 'Адрес нужен только для курьера'))),
});

См. также ​