Skip to content

transform ​

转换 Schema 的结果,并且可以改变它的类型。函数只在校验通过后执行。

签名 ​

ts
function transform<T, U>(schema: Schema<T>, fn: (value: T) => U): Schema<U>

参数 ​

参数类型说明
schemaSchema<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));

另请参阅 ​