preprocess
在校验之前预处理输入值。适用于数据格式不方便的情况。
签名
ts
function preprocess<T>(fn: (value: unknown) => unknown, schema: Schema<T>): Schema<T>参数
| 参数 | 类型 | 说明 |
|---|---|---|
fn | (value: unknown) => unknown | 预处理函数。接收任意类型的原始值 |
schema | Schema<T> | 校验 fn 结果的 Schema |
注意事项
fn接收的是未经校验的数据:可能是任何值。- 所有
coerce函数都基于preprocess实现。
示例
带逗号的小数
ts
const amount = preprocess(
(v) => (typeof v === 'string' ? Number(v.replace(',', '.')) : v),
number(),
);
validate(amount, '1,5').data; // 1.5字符串中的 JSON
ts
const settings = preprocess(
(v) => (typeof v === 'string' ? JSON.parse(v) : v),
object({ theme: oneOf(['light', 'dark']) }),
);