基本用法
简单类型
创建一个简单的字符串模式:
ts
import { z } from "zod";
// 创建一个字符串的模式
const mySchema = z.string();
// 解析
mySchema.parse("tuna"); // => "tuna"
mySchema.parse(12); // => throws ZodError
// "安全"解析(如果验证失败不抛出错误)
mySchema.safeParse("tuna"); // => { success: true; data: "tuna" }
mySchema.safeParse(12); // => { success: false; error: ZodError }
对象模式
创建一个对象模式:
ts
import { z } from "zod";
const User = z.object({
username: z.string(),
age: z.number(),
});
User.parse({ username: "Ludwig", age: 25 });
// 提取出推断的类型
type User = z.infer<typeof User>;
// { username: string; age: number }
错误处理
使用 safeParse
来安全地处理验证错误:
ts
const result = User.safeParse({ username: 123, age: "25" });
if (!result.success) {
console.log(result.error.issues);
// [
// {
// "code": "invalid_type",
// "expected": "string",
// "received": "number",
// "path": ["username"],
// "message": "Expected string, received number"
// },
// {
// "code": "invalid_type",
// "expected": "number",
// "received": "string",
// "path": ["age"],
// "message": "Expected number, received string"
// }
// ]
}
类型推断
使用 z.infer
来提取模式的 TypeScript 类型:
ts
const NumberSchema = z.number();
type NumberType = z.infer<typeof NumberSchema>; // number
const StringSchema = z.string();
type StringType = z.infer<typeof StringSchema>; // string
const ObjectSchema = z.object({
name: z.string(),
age: z.number().optional(),
});
type ObjectType = z.infer<typeof ObjectSchema>;
// { name: string; age?: number | undefined }