transform
转换 Schema 的结果,并且可以改变它的类型。函数只在校验通过后执行。
签名
ts
function transform<T, U>(schema: Schema<T>, fn: (value: T) => U): Schema<U>参数
| 参数 | 类型 | 说明 |
|---|---|---|
schema | Schema<T> | 其结果将被转换的 Schema |
fn | (value: T) => U | 转换函数 |
与 pipe 中转换的区别
pipe 中的 trim、toLowerCase 等操作不改变类型。transform 会改变类型:字符串可以变成数组、数字或对象。
fn 中抛出的异常不会变成校验错误,而是继续向外抛出。请先用规则校验值,再进行转换。
示例
逗号分隔的字符串转数组
ts
const ids = transform(pipe(string(), pattern(/^\d+(,\d+)*$/)), (s) => s.split(',').map(Number));
validate(ids, '1,2,3').data; // [1, 2, 3]元转为分
ts
const price = transform(pipe(coerce.number(), min(0)), (yuan) => Math.round(yuan * 100));另请参阅
- preprocess:在校验前预处理输入
- pipe