mcpField
Z
zod-schema-validation

zod-schema-validation

github.com/mindrally开发2871.2k 次安装3 周前更新
代码仓库

关于 zod-schema-validation

面向 TypeScript 开发者的 Zod 验证与类型推断指南,涵盖模式组合、安全解析、表单与 API 数据校验及错误处理。

主要功能

  1. 01模式校验与类型推断
  2. 02模式组合与复用
  3. 03安全解析和错误格式化
  4. 04数据转换与自定义细化
  5. 05表单和 API 校验指南

适用场景

  1. 01校验 API 边界的外部数据
  2. 02从模式推导 TypeScript 类型
  3. 03处理表单校验错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill zod-schema-validation

安装后在 Claude Code 中输入/zod-schema-validation确认已加载。

详细介绍

Zod 架构验证

你是 TypeScript 应用中 Zod 架构验证和类型推断方面的专家。

核心原则

  • 使用 Zod 进行架构验证和类型推断
  • 在系统边界(API、表单、外部数据)验证数据
  • 利用 Zod 架构进行 TypeScript 类型推断
  • 针对验证错误实施提前返回和守卫子句

架构设计

基本架构
import { z } from 'zod'

const UserSchema = z.object({
  id: z.string().uuid(),
  email: z.string().email(),
  name: z.string().min(1).max(100),
  age: z.number().int().positive().optional(),
  role: z.enum(['admin', 'user', 'guest']),
  createdAt: z.date(),
})

type User = z.infer<typeof UserSchema>
最佳实践
  • 在使用位置附近定义架构
  • 使用 .infer 派生 TypeScript 类型
  • 使用 .extend()、.merge()、.pick()、.omit() 组合架构
  • 为常见模式创建可复用的基础架构

验证模式

安全解析
const result = UserSchema.safeParse(data)
if (!result.success) {
  console.error(result.error.format())
  return
}
// result.data is typed as User
转换与细化
const schema = z.string()
  .transform((val) => val.trim().toLowerCase())
  .refine((val) => val.length > 0, 'Cannot be empty')

表单集成

  • 通过 @hookform/resolvers/zod 将 Zod 与 react-hook-form 配合使用
  • 定义与表单结构匹配的表单架构
  • 在 UI 中妥善处理验证错误
  • 对可选更新表单使用 .partial()

API 验证

  • 在 API 路由中验证请求正文
  • 验证查询参数和路径参数
  • 返回结构化错误响应
  • 对不同的响应类型使用可辨联合

错误处理

  • 实施自定义错误消息,以改善用户体验
  • 使用 .format() 输出结构化错误
  • 创建自定义错误映射以支持 i18n
  • 妥善处理嵌套对象错误

高级模式

可辨联合
const ResultSchema = z.discriminatedUnion('status', [
  z.object({ status: z.literal('success'), data: UserSchema }),
  z.object({ status: z.literal('error'), message: z.string() }),
])
递归架构
const CategorySchema: z.ZodType<Category> = z.lazy(() =>
  z.object({
    name: z.string(),
    children: z.array(CategorySchema),
  })
)

性能

  • 预编译频繁使用的架构
  • 避免在渲染函数中创建架构
  • 有意使用 .passthrough() 或 .strict()
  • 对大型对象考虑使用部分验证

评论

支持 Markdown