Skip to content

validate ​

Проверяет данные по схеме и возвращает результат: валидны ли они, очищенные данные и ошибки. Никогда не бросает исключение из-за невалидных данных.

Сигнатура ​

ts
function validate<S extends Schema>(schema: S, value: unknown, options?: Options): Result<Infer<S>>

Параметры ​

ПараметрТипОписание
schemaSchemaСхема, по которой проверяются данные
valueunknownЛюбые данные: объект из формы, req.body, строка…
optionsOptionsНеобязательные опции, см. ниже

Опции ​

ОпцияТипПо умолчаниюОписание
allbooleanfalseСобирать все ошибки поля в issues, а не останавливаться на первой. В errors всё равно попадает первая
messagesRecord<string, Message>—Сообщения только для этого вызова — например, язык текущего запроса. Чего нет — берётся из setMessages
labelsRecord<string, string>—Названия полей для {label} по пути: { email: 'Почта', 'address.city': 'Город' }. См. label
maxDepthnumber256Максимальная вложенность рекурсивных схем lazy
abortEarlybooleanfalseОстановить проверку на первой ошибке. В результате будет одна ошибка — быстрее на сервере, когда подробности не нужны. Для форм не подходит

Возвращает ​

ПолеТипОписание
validbooleantrue, если ошибок нет
dataT | undefinedОчищенные данные: применены trim, coerce, значения по умолчанию, лишние поля удалены. При ошибке — undefined
errorsRecord<string, string>Первая ошибка каждого поля. Ключ — путь через точку: name, address.city, items.0.title. Ошибка самого значения — под ключом ''
issuesIssue[]Все ошибки по порядку: { code, message, path, params }, где path — массив (['items', 0, 'title']), params — параметры правила ({ min: 8 })

Если в схеме есть checkAsync, validate бросит ошибку — используйте validateAsync.

Примеры ​

Форма в браузере ​

ts
const Login = object({
  email: pipe(string(), trim(), email()),
  password: pipe(string(), minLength(8)),
});

const result = validate(Login, { email: 'bad', password: '123' });

result.valid;  // false
result.errors; // { email: 'Invalid email', password: 'Must be at least 8 characters long' }

Успешная проверка ​

ts
const result = validate(Login, { email: ' Ivan@Mail.ru ', password: '12345678', remember: 'on' });

result.valid; // true
result.data;  // { email: 'Ivan@Mail.ru', password: '12345678' } — пробелы обрезаны, лишнее поле удалено

Все ошибки поля ​

ts
const Code = pipe(string(), length(6), pattern(/^\d+$/));

validate(Code, 'abc').issues.length;                // 1
validate(Code, 'abc', { all: true }).issues.length; // 2

См. также ​

  • validateAsync — то же для асинхронных проверок
  • parse — возвращает данные или бросает исключение
  • TypeScript — сужение типа результата