You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zod能否重塑输入对象并重命名属性键?求实现方法

解决方案

要实现把category字段替换成categoryId的需求,你需要在整个对象Schema层面使用transform,而不是只在category字段上做转换。字段级的transform只能修改对应字段的值,没法改变字段名,所以得在整体转换时重新构造输出对象。

直接上可行的代码:

import { z } from "zod";

const ArticleSchema = z.object({
  title: z.string().min(5),
  body: z.string().min(5),
  // 先验证category的结构是否符合要求
  category: z.object({
    id: z.number().int(),
    name: z.string(),
  }),
// 对整个对象做转换:解构出category和其他字段,重构为带categoryId的新对象
}).transform(({ category, ...rest }) => ({
  ...rest,
  categoryId: category.id,
}));

测试示例:

const inputData = {
  title: "My title",
  body: "My body",
  category: { id: 1, name: "My category" }
};

const parsedResult = ArticleSchema.parse(inputData);
// 输出结果:{ title: "My title", body: "My body", categoryId: 1 }

这个方案既完成了原数据的结构验证(比如title/body的长度、category.id是整数),又把输出结构改成了你想要的样子。如果输入数据不符合验证规则(比如title长度不够、category.id不是整数),Zod依然会抛出对应的验证错误,完全不影响原有校验逻辑。

内容的提问来源于stack exchange,提问作者caseyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:19