Zod 如何正确获取数组内嵌套对象的详细字段级错误信息-js教程

当使用 zod 验证包含对象数组的结构时,`flatten()` 默认无法展开嵌套字段错误;需改用 `error.format()` 方法递归提取每一层(如 `sizes[0].price`)的精确校验失败信息。

在 Zod 中,.flatten() 方法仅对顶层字段(如 sizes)做扁平化处理,不会深入数组元素内部的对象结构。因此,当你传入 sizes: [{}] 时,Zod 能识别出数组非空但首项对象缺失必填字段,却无法将 price、off_price、sell_quantity 的错误映射到对应路径下——最终只返回 “sizes”:[“Required”,”Required”,”Required”] 这类模糊提示,丢失关键定位信息。

要获得真正可操作的嵌套错误结构,应使用 Zod 内置的 .format() 方法。它会按数据路径(如 [‘sizes’, 0, ‘price’])生成嵌套对象格式的错误树,完美保留层级语义:

import { z } from 'zod';

const schema = z.object({
  sizes: z
    .array(
      z.object({
        price: z.string().nonempty("价格不能为空"),
        off_price: z.string().nonempty("折扣价不能为空"),
        sell_quantity: z.string().nonempty("销量不能为空"),
      })
    )
    .nonempty("至少需提供一个规格"),
}).strict();

const result = schema.safeParse({ sizes: [{}] });

if (!result.success) {
  // ✅ 推荐:获取结构化嵌套错误
  const formatted = result.error.format();
  console.log(formatted.sizes?.[0]);
  // 输出:
  // {
  //   _errors: [],
  //   price: { _errors: ["价格不能为空"] },
  //   off_price: { _errors: ["折扣价不能为空"] },
  //   sell_quantity: { _errors: ["销量不能为空"] }
  // }

  // ✅ 也可遍历所有原始错误详情(含完整 path)
  console.log(result.error.issues);
  // [
  //   { path: ["sizes", 0, "price"], message: "价格不能为空" },
  //   { path: ["sizes", 0, "off_price"], message: "折扣价不能为空" },
  //   ...
  // ]
}

⚠️ 注意事项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Zod 如何正确获取数组内嵌套对象的详细字段级错误信息-js教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029513+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029513+
  • 本周更新: 0+
  • 最后更新: 2026-03-16