Skip to content

prohibitedIf ​

Поле должно быть пустым, если выполняется условие, иначе — необязательное. Аналог prohibited_if в Laravel.

Сигнатура ​

ts
function prohibitedIf<T>(condition: Condition, schema: Schema<T>, msg?: Message): Schema<T | undefined>

type Condition = Record<string, unknown> | ((info: { parent: unknown; root: unknown }) => boolean)

Параметры ​

ПараметрТипОписание
conditionConditionСоседние поля и их значения: { delivery: 'courier' }; несколько значений — массивом: { delivery: ['courier', 'post'] }. Или функция
schemaSchema<T>Схема значения, когда оно передано
msgMessageСвоё сообщение

Коды ошибок ​

КодКогдаСообщение по умолчанию
prohibitedУсловие выполняется, а значение переданоMust be empty

Тексты можно поменять: см. Сообщения и локализация.

Особенности ​

Защищает от данных, которые не должны прийти вместе: цена у бесплатного товара, ИНН у физлица без ИП.

Пример ​

ts
const Product = object({
  type: oneOf(['free', 'paid']),
  price: prohibitedIf({ type: 'free' }, coerce.number()),
});

validate(Product, { type: 'free', price: '10' }).errors; // { price: 'Must be empty' }
validate(Product, { type: 'paid', price: '10' }).data;   // { type: 'paid', price: 10 }

См. также ​