TypeScript · Runtime Validation · 2026

Zod 完全指南

编译时 TypeScript 给你静态类型;运行时数据来自 HTTP / 表单 / localStorage,类型再对也挡不住脏数据。Zod 用一份 schema 同时解决校验 + 类型推断 + 解析——写一次,TS 编译和运行时各拿所需。

10章节
v4新一代重写
14xv4 parse 加速
#1TS 校验库

为什么 Zod

TS 的边界

TypeScript 只在编译时存在——API 返回 JSON、用户填表单、本地存储读出来的东西,TS 完全不知道长什么样。不校验就 as User 断言,是隐形炸弹。

Zod 的价值

一份 z.object({...}) schema 同时:(1) 运行时校验 (2) 自动推断 TS 类型 (3) 转换/解析数据。你写 schema,三件事一起到手——这就是为什么 2024 起 Zod 成为 TS 生态事实标准。

章节目录

01

为什么需要运行时校验

TS 只在编译时——HTTP/表单/存储读回来的数据 TS 管不到。Zod 与 Yup/Joi/io-ts 对比,v4 重写的意义。

type gapvs Yupv4
02

schema 基础与 parse

z.string / z.number / z.object / z.array;parse 抛异常 vs safeParse 返回 Result;z.infer<typeof schema> 推断类型。

z.objectsafeParseinfer
03

进阶类型与组合

union / intersection / discriminatedUnion / tuple / record / map;optional、nullable、default、catch 的区别。

uniondiscriminatedoptional
04

约束、refine、transform

字符串 .min/.max/.regex/.email/.url;refine / superRefine 自定义校验;transform 把 string 变 Date、trim、parseInt。

refinetransformpipe
05

schema 组合与继承

.extend / .merge / .pick / .omit / .partial / .required;从一份 User schema 派生 CreateUser、UpdateUser、PublicUser——避免重复。

extendpick/omitpartial
06

错误处理与国际化

ZodError / issues 结构;formatError / flatten;自定义 errorMap 支持中文错误;映射到表单字段显示。

ZodErrorerrorMapi18n
07

表单校验(RHF/Conform)

React Hook Form + @hookform/resolvers/zod;Next.js Server Actions + Conform;TanStack Form;类型推导从 schema 贯穿到 UI。

RHFConformServer Actions
08

API 边界:tRPC / Hono / OpenAPI

tRPC input/output schema;Hono zValidator;zod-to-openapi/@asteasolutions/zod-to-openapi 从 schema 自动生成 OpenAPI 文档。

tRPCHonoOpenAPI
09

Zod v4 与生态

v4 重写——parse 快 14 倍、bundle 小 3 倍、新的 z.iso.datetime / z.record 行为;@standard-schema/spec 与 Valibot/ArkType 互操作。

Zod v4standard-schemaValibot
10

生产实战与陷阱

环境变量校验、LLM 输出结构化解析、DB 行映射、缓存反序列化;parse 抛异常别当控制流;schema 重用的目录组织。

envLLM 结构化陷阱

学习建议

已有 TS 基础

直接看第 2 章 schema/parse/infer,再到第 5 章组合、第 7 章表单集成。不到半天能用于生产。

从 Yup/Joi 迁移

看第 1 章对比,第 4 章 refine/transform 对应 Yup 的 test/transform,第 9 章了解 v4 重写后性能和体积的突破。