javascript - ¿Cómo validar un campo en Zod dependiendo del valor de otro campo?
Tengo un esquema y necesito hacer que el campo role solo se valide cuando el valor del campo subject sea 1, de lo contrario, el role no debe validarse en absoluto
const schema = z.object({
subject: z.number().default(0),
gender: z.object({
owner: z.number(),
stranger: z.number().array().min(1),
}),
age: z.object({
owner: z.number(),
stranger: z.number().array().min(1),
}),
role: z.object({
owner: z.number(),
stranger: z.number(),
}),
});
Intenté usar el método refine pero fue infructuoso. En todos los ejemplos de código que vi, el refine solo procesaba el campo en el que se llamaba este método. En mi caso, necesito procesar otro campo
Respuesta #1
Puedes manejar dicha validación condicional usando .refine(validator: (data:T)=>any, params?: RefineParams) - aquí
Implementación de ejemplo:
const schema = z.object({
subject: z.number().default(0),
role: z.object({
owner: z.number(),
stranger: z.number(),
}),
}).refine(data => data.subject !== 1 || (data.subject === 1 && data.role), {
message: "Role field is required when subject equals 1",
path: ['role'] // Pointing out which field is invalid
});
