javascript - 如何在 zod 中有条件地扩展 schema?
const schemaA = z.object({
a: z.enum(['b', 'c']),
b: z.number().optional(),
c: z.boolean().transform((val)=> +val) // boolean to number (0 | 1).
})
const schemaB = z.object({
d: z.string().refine(validator.isIpAddress)
e: z.number()
password: z.string(),
passwordConfirm: z.string(),
}).refine((data)=> data.password === data.passwordConfirm, { path: ['password', 'passwordConfirm'], message: 'passwords do not match!' } )
const schemaC = z.object({
d: z.string().refine(validator.isMacAddress)
f: z.boolean().transform((val)=> +val) // boolean to number (0 | 1).
})
我希望 schemaA 仅在字段 a 等于 "b" 时包含 schemaB,并且仅在字段 a 等于 "c" 时包含 schemaC。
我如何在 Zod 中实现这一点?
另外,我想确保,当我使用 zod.infer<typeof schemaA> 来正确推断所有字段时。
此外,我想确保我得到完整的 zod 验证错误信息,而不仅仅是类似 “验证错误” 这样的通用错误信息。