ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] > [home](https://zod.dev/?id=table-of-contents) > [中文](https://zod.dev/README_ZH) ## 概述 Zod 是一个 TypeScript 优先的模式声明和验证库。我使用术语“架构”来广义地指代任何数据类型,从简单的`字符串`到复杂的嵌套对象。 Zod 旨在尽可能对开发人员友好。目标是消除重复的类型声明。使用 Zod,只需声明*一次*验证器,Zod 就会自动推断出静态 TypeScript 类型。将更简单的类型组合成复杂的数据结构很容易。 其他一些很棒的方面: * 零依赖 * 适用于 Node.js 和所有现代浏览器 * 小:8kb 缩小 + 压缩 * Immutable: 方法(例如`.optional())`返回一个新实例 * 简洁、可链接的接口 * 函数式方法:[解析,不验证](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) * 也适用于纯 JavaScript!您不需要使用 TypeScript。 ## 安装 ``` pnpm add zod ``` ## 验证 ``` const name = z.string({ required_error: "Name is required", invalid_type_error: "Name must be a string", }); // 使用验证方法时,你可以传递一个附加参数,以提供自定义错误信息 z.string().min(5, { message: "Must be 5 or more characters long" }); z.string().max(5, { message: "Must be 5 or fewer characters long" }); z.string().length(5, { message: "Must be exactly 5 characters long" }); z.string().email({ message: "Invalid email address" }); z.string().url({ message: "Invalid url" }); z.string().emoji({ message: "Contains non-emoji characters" }); z.string().uuid({ message: "Invalid UUID" }); z.string().includes("tuna", { message: "Must include tuna" }); z.string().startsWith("https://", { message: "Must provide secure URL" }); z.string().endsWith(".com", { message: "Only .com domains allowed" }); z.string().datetime({ message: "Invalid datetime string! Must be UTC." }); z.string().ip({ message: "Invalid IP address" }); //日期 const datetime = z.string().datetime(); datetime.parse("2020-01-01T00:00:00Z"); // pass datetime.parse("2020-01-01T00:00:00.123Z"); // pass datetime.parse("2020-01-01T00:00:00.123456Z"); // pass (任意精度) datetime.parse("2020-01-01T00:00:00+02:00"); // fail (不允许偏移) // 整形 z.number().gt(5); z.number().gte(5); // alias .min(5) z.number().lt(5); z.number().lte(5); // alias .max(5) ``` ## 示例 ### hello-world 字符串 ``` 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 } ``` 对象 ``` import { z } from "zod"; // 定义 schema const UserSchema = z.object({ username: z.string() .min(3, "用户名至少3个字符") .max(20, "用户名最多20个字符"), age: z.number() .min(0, "年龄不能为负") .max(120, "年龄不能超过120"), email: z.string() .email("邮箱格式不正确"), website: z.string() .url("请输入有效的URL") .optional(), role: z.enum(["admin", "user"]), }); // 使用 schema 验证数据 type User = z.infer<typeof UserSchema>; // 自动推导类型 try { const user = UserSchema.parse({ username: "张三", age: 25, email: "zhangsan@example.com", role: "admin" }); console.log("验证通过:", user); } catch (error) { console.error("验证失败:", error); } ```