菜单

概述

相关源文件

Zod 是一个 TypeScript 优先的模式声明和验证库,旨在通过静态类型推断实现运行时类型检查。本文档提供了 Zod 库的高层概述、主要特性和核心架构。

目的与范围

Zod 允许开发者定义用于在运行时验证数据的模式,同时自动推断 TypeScript 类型。这消除了手动编写和维护独立类型定义的需要。该库围绕着一种函数式方法设计:“解析而非验证”(parse, don't validate),这意味着数据被转换为预期形状,而不仅仅是检查。

有关安装和设置 Zod 的更详细信息,请参阅安装和设置。有关代码示例,请参阅基本用法示例

主要功能

  • TypeScript 优先:以 TypeScript 的类型系统为核心构建
  • 零依赖:自包含,无外部依赖
  • 跨平台:可在 Node.js 和所有现代浏览器中运行
  • 轻量级:压缩和打包后 8KB
  • 不可变 API:方法返回新的模式实例,而不是修改现有实例
  • 全面验证:支持原始类型、对象、数组、联合类型等
  • 强类型推断:自动从模式定义中推断 TypeScript 类型
  • 可组合性:易于将简单模式组合成复杂结构

来源:README.md180-196

核心概念

基于模式的验证

在 Zod 中,“模式”指的是任何数据类型定义,从字符串和数字等简单原始类型到复杂的嵌套对象。模式用于在运行时验证和解析数据。

来源:README.md180-196

类型推断

Zod 的一个关键特性是自动类型推断。当您定义一个模式时,TypeScript 会自动推断出相应的静态类型,从而消除了重复类型声明的需要。

来源:README.md182-186

架构概览

类型系统层级

Zod 类型系统围绕着一个名为ZodType 的核心抽象类构建,该类为所有模式类型提供了基础。

来源:README.md705-730

验证管道

使用 Zod 验证数据时,输入会通过一个管道,其中包含类型检查、自定义细化和转换。

来源:README.md673-684

核心组件

ZodType(基类)

ZodType 是所有 Zod 模式都继承的抽象基类。它提供了核心验证方法并实现了流畅、可链式调用的 API。

关键方法

  • parse - 验证数据并返回结果或抛出错误
  • safeParse - 验证数据而不抛出(返回成功/错误对象)
  • parseAsync - 异步验证
  • refine - 添加自定义验证逻辑
  • transform - 在验证过程中转换数据

来源:README.md134-164

Schema 类型

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 生成详细的错误信息。该错误系统旨在提供有帮助的、上下文感知的消息。

来源:README.md167-171

使用模式

基本解析

来源:README.md667-700

模式组合

Zod 使将模式组合成更复杂的结构变得容易

来源:README.md624-642 README.md653-666

实现理念

Zod 基于几个关键设计原则构建

  1. 不可变性:诸如.optional() 的方法返回新实例而不是修改现有实例
  2. 可组合性:简单模式可以轻松组合成复杂结构
  3. 类型安全:确保编译时和运行时的类型安全
  4. 开发者体验:优先提供简洁、易于使用的链式 API

该库通过为验证逻辑和类型信息提供单一事实来源来工作,从而消除了定义独立的 TypeScript 接口和验证逻辑的常见模式。

来源:README.md180-196