基于另一个字段的 ZOD 验证

Kir*_*kov 12 typescript zod

想象我有一个像这样的物体

{
  field1: 'test',
  field2: 'test1'
}
Run Code Online (Sandbox Code Playgroud)

我如何创建以下验证:

如果field1field2两者都为空 - 则无效

如果field1field2两者都不为空 - 则无效

其他情况均有效。

小智 24

您可以使用.refine()

const res = z.object({
    field1: z.string().optional(),
    field2: z.string().optional(),
}) 
    .refine(schema => {
        return !(
            schema.field1 === undefined && 
            schema.field2 === undefined ||
            schema.field2 !== undefined && 
            schema.field1 !== undefined
        ); 
    }, "Your message");
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,您不需要使用三元,只需使用您的表达式,它就会导致 true 或 false。例如:`refine(schema => schema.field1 === undefined)` (2认同)