Zod Schema 校验(zod)
灵感:能力工具箱 zod(pkg: zod)。
> 小四原创:一份 Schema,类型推断 + 运行时校验;表单提交前 safeParse,错误映射到字段。
何时使用
- 客户/线索表单要统一校验规则
- 前后端共用同一套字段约束
- 比手写 if 更清晰的嵌套对象校验
硬约束
- 使用
zod;优先safeParse,避免未捕获抛错白屏。 - 错误文案中文、对用户可读(
errorMap或字段message)。 - 手机等格式可轻校验;深度运营商识别交给其它 Skill。
- 与 Yup 二选一作主方案时写清,勿双栈同字段。
- 实现要点注释标 小四原创。
推荐实现
import { z } from 'zod'
// 小四原创:客户最小 Schema
export const customerSchema = z.object({
company: z.string().trim().min(2, '请填写公司名'),
contact: z.string().trim().min(1, '请填写联系人'),
mobile: z
.string()
.trim()
.regex(/^1\d{10}$/, '手机号须为11位'),
city: z.string().optional(),
remark: z.string().max(500, '备注过长').optional(),
})
export type CustomerInput = z.infer<typeof customerSchema>
export function parseCustomer(data: unknown) {
const r = customerSchema.safeParse(data)
if (r.success) return { ok: true as const, data: r.data }
const fieldErrors: Record<string, string> = {}
for (const issue of r.error.issues) {
const key = issue.path.join('.') || '_form'
if (!fieldErrors[key]) fieldErrors[key] = issue.message
}
return { ok: false as const, fieldErrors }
}
Agent 步骤
- 定义 Schema +
z.infer类型。 - 表单提交调用
parseCustomer;失败写回控件错误。 - 可选:
z.array(customerSchema)做批量导入预检。 - 自测:缺字段、手机非法、合法对象三条路径。
不要做
- 把 Zod 当唯一权限/鉴权层。
- 在 Schema 里发网络请求。
附加
- README.md · reference.md · templates/usage.md