Skip to content

pipe ​

Добавляет к схеме правила и преобразования. Они выполняются по порядку после проверки типа.

Сигнатура ​

ts
function pipe<T>(schema: Schema<T>, ...actions: Action<T>[]): Schema<T>

Параметры ​

ПараметрТипОписание
schemaSchema<T>Базовая схема: string(), number(), array(...)…
actionsAction<T>[]Правила и преобразования

Порядок выполнения ​

  1. Проверяется базовая схема. Если ошибка — правила не выполняются.
  2. Правила и преобразования выполняются слева направо. Каждое следующее получает результат предыдущего: pipe(string(), trim(), minLength(2)) проверяет длину уже обрезанной строки.
  3. На первой ошибке выполнение останавливается. С опцией { all: true } у validate проверяются все правила.
  4. Асинхронные правила (checkAsync) запускаются в конце и только если остальные прошли.

Что можно передавать ​

ТипДействия
ДлинаminLength, maxLength, length
Числаmin, max, between, integer
Форматpattern, email, url, uuid, startsWith, endsWith, includes
ДатыminDate, maxDate, after, before
Массивыunique
Контрольные суммыinn, snils, luhn
СравнениеsameAs
Преобразованияtrim, toLowerCase, toUpperCase
Своиcheck, checkAsync

TypeScript проверяет, что правило подходит к типу схемы: pipe(string(), min(1)) — ошибка компиляции.

Преобразования внутри pipe не меняют тип. Чтобы получить значение другого типа, используйте transform.

Примеры ​

Логин ​

ts
const username = pipe(
  string(),
  trim(),
  toLowerCase(),
  minLength(3),
  maxLength(20),
  pattern(/^[a-z0-9_]+$/, 'Только латиница, цифры и _'),
);

С optional ​

ts
// optional снаружи pipe
const phone = optional(pipe(string(), pattern(/^\+7\d{10}$/)));

См. также ​