Zod

目前 TypeScript 生态中最流行的数据验证库,专为 TypeScript 优先设计

AI编程开发 部分免费

Zod 是目前 TypeScript 生态中最流行的数据验证库,专为 TypeScript 优先设计,通过极简的声明式 API 让开发者定义数据结构 Schema,并对任意输入数据进行验证,同时获得完全类型安全的解析结果。项目至今已在 GitHub 获得超过 4 万 Star,是 tRPC、Prisma、Deno Deploy 等知名开源项目的首选验证方案。

项目简介

Zod 由独立开发者 Colin Hall 创作和维护,核心理念是「让你的运行时数据与编译时类型保持一致」。传统的 TypeScript 类型系统只在编译阶段有效,程序运行后类型信息全部丢失,外部输入(如 API 请求体、数据库数据、用户表单)无法被验证。Zod 通过定义 Schema 并调用 .parse() 方法,在运行时对数据进行验证,验证通过后返回完全类型化的对象,彻底消除了「类型和实际数据不符」这一类 Bug。

核心功能

声明式 Schema 定义:Zod 提供 z.string()、z.number()、z.boolean()、z.object({})、z.array({}) 等一系列 Schema 构造器,开发者可以用链式 API 定义任意复杂的数据结构,包括嵌套对象、可选字段、默认值、联合类型、枚举值等。

零运行时类型转换开销:.parse() 方法在验证通过后直接返回 TypeScript 类型安全的对象,不需要额外的类型断言(as)或类型守卫(type guard)代码,显著减少样板代码。

不可变 API 设计:所有 Schema 方法(如 .optional()、.nullable()、.transform())都返回新的 Schema 实例而非修改原实例,符合函数式编程最佳实践,也更方便测试和复用。

内置 JSON Schema 导出:Zod Schema 可以一键转换为 JSON Schema,可用于 OpenAPI/Swagger 文档生成、API 契约定义等场景,打通前后端数据协议。

丰富的验证规则:内置 email、url、uuid、CUID、正则表达式匹配、数字范围、字符串长度、枚举值等验证规则,无需额外依赖即可覆盖绝大多数业务验证场景。

广泛的生态系统:Zod 生态包括 zod-to-json-schema、zod-to-ts、@hookform/resolvers(表单集成)、trpc(端到端类型安全 API)等大量配套工具,覆盖从前端表单到后端 API 的全链路。

技术实现

Zod 的核心实现基于 TypeScript 的条件类型(Conditional Types)和映射类型(Mapped Types)。每个 Schema 实际上是一个泛型类,.parse() 方法内部通过 TypeScript 的类型推导能力,在验证通过后将 unknown 类型收窄为目标类型返回。例如 z.object({ name: z.string() }).parse(input) 返回 { name: string } 类型而非 any。

Zod 完全不依赖任何第三方运行时库,仅靠 TypeScript 自身能力实现所有功能,核心包压缩后仅约 2KB(gzip),对前端项目几乎零负担。验证逻辑采用递归下降解析器模式,对象和数组字段逐层验证,支持自定义错误信息,支持设置 strict 模式拒绝未知字段。

快速上手

第一步,安装 Zod:在项目目录执行 npm install zod 或 pnpm add zod;

第二步,定义数据结构 Schema: import * as z from "zod"; const User = z.object({ name: z.string().min(2, "名字至少2个字符"), email: z.string().email("邮箱格式不正确"), age: z.number().optional(), });

第三步,验证外部输入数据: const result = User.safeParse(req.body); if (!result.success) { console.log(result.error.issues); } else { const user = result.data; // 类型为 { name: string; email: string; age?: number } }

第四步,与 tRPC 或 Next.js API 集成:Zod 是 tRPC 的默认验证方案,在 tRPC 路由中直接使用 Schema 验证输入,即可实现端到端类型安全的 API 调用,无需手动编写类型守卫代码。

适用人群

TypeScript 开发者:需要确保 API 输入、数据库数据、外部 API 响应与 TypeScript 类型一致的开发团队和个人; 全栈工程师:使用 Next.js/Nuxt + tRPC/GraphQL 构建全栈应用时,需要类型安全的输入验证; 开源库作者:编写需要接收用户配置数据的 npm 包时,用 Zod 做配置 Schema 验证并导出类型。

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论