原始类型
Zod 提供了所有 JavaScript 原始类型的验证器。
基础类型
ts
import { z } from "zod";
// 原始值类型
z.string();
z.number();
z.bigint();
z.boolean();
z.date();
z.symbol();
// 空类型
z.undefined();
z.null();
z.void(); // 接受 undefined
// 任意类型
z.any();
z.unknown();
// never 类型
z.never();
类型强制转换
Zod 提供了一种便捷的方法来强制转换原始类型:
ts
const schema = z.coerce.string();
schema.parse("tuna"); // => "tuna"
schema.parse(12); // => "12"
schema.parse(true); // => "true"
// 所有原始类型都支持强制转换
z.coerce.string(); // String(input)
z.coerce.number(); // Number(input)
z.coerce.boolean(); // Boolean(input)
z.coerce.bigint(); // BigInt(input)
z.coerce.date(); // new Date(input)
布尔值的强制转换
布尔值的强制转换非常简单:
ts
z.coerce.boolean().parse("tuna"); // => true
z.coerce.boolean().parse("true"); // => true
z.coerce.boolean().parse("false"); // => true
z.coerce.boolean().parse(1); // => true
z.coerce.boolean().parse([]); // => true
z.coerce.boolean().parse(0); // => false
z.coerce.boolean().parse(undefined); // => false
z.coerce.boolean().parse(null); // => false
自定义错误消息
你可以在创建模式时自定义错误消息:
ts
const name = z.string({
required_error: "名字是必需的",
invalid_type_error: "名字必须是字符串",
});
const age = z.number({
required_error: "年龄是必需的",
invalid_type_error: "年龄必须是数字",
});