check
自定义同步检查。值有效时函数返回 true。
签名
ts
function check<T>(fn: (value: T, info: Info) => boolean, msg?: Message): Action<T>
interface Info {
parent: unknown; // 包含该字段的对象(原始数据)
root: unknown; // 传给 validate 的全部数据
}参数
| 参数 | 类型 | 说明 |
|---|---|---|
fn | (value: T, info: Info) => boolean | 检查函数。value 是已经校验并转换后的值 |
msg | Message | 自定义错误信息。可以是带 {参数} 的字符串或函数 |
错误代码
| 代码 | 触发条件 | 默认信息 |
|---|---|---|
invalid | fn 返回 false | Invalid value |
可以修改这些文本:见 错误信息与国际化。
注意事项
- 要复用检查,请把它包装成函数 —— 见 自定义规则与 Schema。
- 需要查询数据库或调用 API 时,请使用
checkAsync。 fn中抛出的异常不会变成校验错误,而是继续向外抛出。
示例
年满 18 岁
ts
const adult = check<Date>((birth) => {
const d = new Date();
d.setFullYear(d.getFullYear() - 18);
return birth <= d;
}, '仅限 18 岁以上');
object({ birthday: pipe(coerce.date(), adult) });依赖其他字段
ts
object({
delivery: oneOf(['pickup', 'courier']),
address: optional(pipe(string(), check((v, { parent }) => parent.delivery === 'courier', '只有快递配送需要地址'))),
});