Zod:用一份 Schema 同时验证数据并推导 TypeScript 类型
一分钟看懂
Zod 是一个以 TypeScript 为中心的数据 Schema 验证库。开发者用代码描述字符串、数字、对象、数组、联合类型等结构,Zod 在运行时检查外部数据是否符合要求,同时让 TypeScript 从 Schema 自动推导静态类型。
它解决了一个常见缺口:TypeScript 类型在编译后会消失,接口响应、表单、环境变量和 JSON 仍可能在运行时传入错误数据。Zod 把数据边界的假设变成真正执行的验证。
你可以用它做什么
验证接口输入和响应
为请求参数、JSON Body 或第三方 API 响应定义 Schema,使用 parse 获得经过验证的数据,或用 safeParse 显式处理成功与错误。这样业务代码不必反复写类型判断。
校验表单与配置
字符串长度、邮箱格式、枚举、默认值和字段间逻辑可以集中表达,错误信息再映射到表单。启动应用时验证环境变量,也能更早发现部署配置缺失。
复用类型定义
从 Schema 推导类型,避免单独维护 TypeScript interface 和验证规则导致两者漂移。对象可通过选择、忽略、扩展和合并构造出创建、更新与返回数据的不同版本。
转换和规范化数据
验证过程中可以预处理、转换或设置默认值,例如把输入字符串变成日期。转换应保持可预测,复杂业务逻辑仍应放在服务层而不是全部塞进 Schema。
主要能力
- 支持基础类型、对象、数组、元组、枚举、联合与递归结构。
- 同步和异步解析,提供可结构化展示的错误信息。
- 从 Schema 推导 TypeScript 输入与输出类型。
- 支持 refine、transform、默认值和预处理。
- 可生成或对接 JSON Schema 等生态格式。
- 体积较小,无外部运行时依赖,适合前后端共享。
适合哪些人
它适合 TypeScript 前端、Node.js API、全栈框架和共享类型库。若项目只有纯 JavaScript,也能使用验证能力,但类型推导优势不明显。
怎么开始使用
从真正不可信的数据边界开始:表单提交、API 请求、环境变量和外部响应。先定义小 Schema 并统一错误处理,再逐步抽取复用。不要在系统内部每一步重复解析已经验证的数据。
使用前需要知道
Schema 只能验证你写出的规则。一个字段是合法 URL,不代表地址安全;一个数字在范围内,也不代表业务状态允许操作。授权、数据库约束和业务一致性仍需其他层处理。
大型深层 Schema、复杂联合和大量转换会增加类型检查或运行开销。升级主要版本前应查看迁移说明并运行完整测试,尤其关注错误格式、默认值和类型推导变化。