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)Параметры
| Параметр | Тип | Описание |
|---|---|---|
condition | Condition | Соседние поля и их значения: { delivery: 'courier' }; несколько значений — массивом: { delivery: ['courier', 'post'] }. Или функция |
schema | Schema<T> | Схема значения, когда оно передано |
msg | Message | Своё сообщение |
Коды ошибок
| Код | Когда | Сообщение по умолчанию |
|---|---|---|
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 }