coerce
对以字符串形式传入的数据进行类型转换:query 参数、FormData、环境变量、CSV。
签名
ts
coerce.string(msg?: Message): Schema<string>
coerce.number(msg?: Message): Schema<number>
coerce.boolean(msg?: Message): Schema<boolean>
coerce.date(msg?: Message): Schema<Date>参数
| 参数 | 类型 | 说明 |
|---|---|---|
msg | Message | 自定义信息。替换该 Schema 所有错误的默认信息 |
转换规则
| 函数 | 转换 | 随后按以下方式校验 |
|---|---|---|
coerce.string() | 数字、boolean、bigint → String(value) | string() |
coerce.number() | 字符串 → 去除空格 → Number(value)。空字符串保持为空 | number() |
coerce.boolean() | 'true'、'1'、'on'、'yes'、1 → true;'false'、'0'、'off'、'no'、0 → false。不区分大小写 | boolean() |
coerce.date() | 非空字符串或数字 → new Date(value) | date() |
已经是正确类型的值不会被修改。不合适的值会产生普通的类型错误:coerce.number() 处理 'abc' → Must be a number。
错误代码
与对应的 Schema 相同:required 以及 string / number / boolean / date。
示例
Query 参数
ts
// GET /products?page=2&limit=20&inStock=1
const Query = object({
page: optional(pipe(coerce.number(), integer(), min(1)), 1),
limit: optional(pipe(coerce.number(), integer(), max(100)), 20),
inStock: optional(coerce.boolean(), false),
});
parse(Query, req.query); // { page: 2, limit: 20, inStock: true }FormData
ts
const data = validate(Form, Object.fromEntries(new FormData(form)));另请参阅
- preprocess:自定义转换
- parse:环境变量示例