typescript 使用Zod [duplicate]验证具有可选值的对象,要求至少有一个属性

i2byvkas  于 2023-06-07  发布在  TypeScript
关注(0)|答案(1)|浏览(226)

此问题已在此处有答案

At least one / minimum one field in Zod Schema Validation(2个答案)
7天前关闭
我使用TypeScript中的Zod库来验证具有可选属性的对象。但是,我需要确保对象至少有一个属性。我想验证对象的结构,并确保它遵循一定的格式,同时允许一些属性是可选的。
下面是我正在使用的对象结构的示例:

interface MyObject {
  prop1?: string;
  prop2?: number;
  // Additional optional properties...
}

我想使用Zod来定义一个验证模式,它允许可选属性,但强制要求对象中必须至少存在一个属性。
如何使用Zod实现这一点?我将感谢任何关于如何定义这种模式并相应地验证对象的指导或代码示例。
我尽力了

z.object({
  prop1: z.string().optional(),
  propt2: z.string().optional(),
});

但有时候我不传递数据我就接受它

bkhjykvo

bkhjykvo1#

您可以添加自定义refinement,以确保对象至少有1个属性,方法是确保至少有1个值不是undefined

const foo = z.object({
  prop1: z.string().optional(),
  propt2: z.string().optional(),
}).refine((obj) => {
  for (const val of Object.values(obj)) {
    if (val !== undefined) return true;
  }
  return false;
}, {
  message: "Object must have at least one property defined"
});

相关问题