Yup 和 Zod 对比:校验库的新旧选择

Yup 是 React 表单时代的老牌校验库,Zod 是 TypeScript 原生的现代标准。本文从 Schema 定义、类型推导、生态集成全面对比。

最佳实践
应用接口与数据存储连接插画

新项目选 Zod——类型推导精确(z.infer)、TS 原生设计、生态集成最广(tRPC/RHF/Drizzle);Yup 适合 Formik 存量项目维护。两者 API 风格相似,迁移成本低。

基本盘

Yup:Joi 启发的浏览器友好校验库,Formik 时代成为 React 表单校验标配。

Zod:2020 年发布,TS 优先设计——Schema 即类型是它的核心命题,已成为全栈 TS 的事实标准。

Schema 定义

// Yup
const schema = yup.object({
  email: yup.string().email().required(),
  age: yup.number().min(18),
});

// Zod
const schema = z.object({
  email: z.string().email(),
  age: z.number().min(18).optional(),
});

风格相似——学习迁移成本都不高。

类型推导对比

这是分水岭:

// Zod:精确推导
type User = z.infer<typeof schema>;   // { email: string; age?: number }

// Yup:推导存在但边角不精确(optional/嵌套的可选性标记常需手工修正)
type User2 = yup.InferType<typeof schema>;

Zod 的类型推导与运行时行为严格一致;Yup 在复杂 Schema 下的推导偏差是长期槽点。

复杂场景与生态

  • 异步校验:两者都支持;Zod 的 refine/superRefine 更灵活;
  • 转换管道:Zod 的 transform/preprocess 体系更完整;
  • 生态:Zod 全胜——tRPC 输入校验、React Hook Form resolver、Drizzle ORM 集成、zod-to-openapi 文档生成。

迁移建议

Yup → Zod 的迁移是"逐 Schema 替换":API 映射直接,错误结构(issues vs inner)适配是主要工作量。新模块先用 Zod,存量随重构替换。

常见问题(FAQ)

Q:Yup 会停止维护吗?

仍在维护但创新停滞——校验库的焦点已移到 Zod 系(及 Valibot 等模块化变体)。

Q:纯 JS 项目选哪个?

都可(Zod 的 TS 优势失效后仍是优秀库);Valibot 的体积优势也可考虑。

Q:浏览器端体积对比?

Zod 核心 ~13KB(gzip),Yup 类似量级;极致体积敏感看 Valibot(模块化 tree-shaking)。


参考文档

本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台