Zod 是一个 TypeScript 优先的模式声明和验证库,旨在通过静态类型推断实现运行时类型检查。本文档提供了 Zod 库的高层概述、主要特性和核心架构。
Zod 允许开发者定义用于在运行时验证数据的模式,同时自动推断 TypeScript 类型。这消除了手动编写和维护独立类型定义的需要。该库围绕着一种函数式方法设计:“解析而非验证”(parse, don't validate),这意味着数据被转换为预期形状,而不仅仅是检查。
有关安装和设置 Zod 的更详细信息,请参阅安装和设置。有关代码示例,请参阅基本用法示例。
在 Zod 中,“模式”指的是任何数据类型定义,从字符串和数字等简单原始类型到复杂的嵌套对象。模式用于在运行时验证和解析数据。
Zod 的一个关键特性是自动类型推断。当您定义一个模式时,TypeScript 会自动推断出相应的静态类型,从而消除了重复类型声明的需要。
Zod 类型系统围绕着一个名为ZodType 的核心抽象类构建,该类为所有模式类型提供了基础。
使用 Zod 验证数据时,输入会通过一个管道,其中包含类型检查、自定义细化和转换。
ZodType 是所有 Zod 模式都继承的抽象基类。它提供了核心验证方法并实现了流畅、可链式调用的 API。
关键方法
parse - 验证数据并返回结果或抛出错误safeParse - 验证数据而不抛出(返回成功/错误对象)parseAsync - 异步验证refine - 添加自定义验证逻辑transform - 在验证过程中转换数据Zod 为不同数据格式提供了各种模式类型
| Schema 类型 | 描述 | 示例 |
|---|---|---|
z.string() | 验证字符串 | z.string().email() |
z.number() | 验证数字 | z.number().positive() |
z.boolean() | 验证布尔值 | z.boolean() |
z.date() | 验证 Date 对象 | z.date() |
z.array() | 验证数组 | z.array(z.string()) |
z.object() | 验证对象 | z.object({ name: z.string() }) |
z.union() | 验证联合类型 | z.union([z.string(), z.number()]) |
z.intersection() | 组合模式 | z.intersection(SchemaA, SchemaB) |
z.tuple() | 验证元组 | z.tuple([z.string(), z.number()]) |
来源:README.md703-730 README.md813-845 src/__tests__/unions.test.ts6-64 src/__tests__/intersection.test.ts6-45
当验证失败时,Zod 通过ZodError 生成详细的错误信息。该错误系统旨在提供有帮助的、上下文感知的消息。
Zod 使将模式组合成更复杂的结构变得容易
来源:README.md624-642 README.md653-666
Zod 基于几个关键设计原则构建
.optional() 的方法返回新实例而不是修改现有实例该库通过为验证逻辑和类型信息提供单一事实来源来工作,从而消除了定义独立的 TypeScript 接口和验证逻辑的常见模式。