prohibitedIf
满足条件时字段必须为空,否则为选填。类似 Laravel 的 prohibited_if。
签名
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> | 值存在时使用的 Schema |
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 }