Skip to content

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 是已经校验并转换后的值
msgMessage自定义错误信息。可以是带 {参数} 的字符串或函数

错误代码 ​

代码触发条件默认信息
invalidfn 返回 falseInvalid 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', '只有快递配送需要地址'))),
});

另请参阅 ​