我有一个具有强制
name
属性的对象,并且包含 nickname
或 other
属性。这就是我的架构的样子,
export const studentSchema = z
.object({
name: z.string().min(1).max(20)
})
.and(
z
.object({
nickname: z.string().min(1).max(20)
})
.or(
z.object({
other: z.string().min(1).max(14)
})
)
)
问题是,当
nickname
和other
都通过时验证就通过了
{
name: "John",
nickname: "any",
other: "play"
}
如何修复架构,使其仅允许对象中的属性之一?例如,
{
name: "John",
nickname: "any"
}
或
{
name: "John",
other: "play"
}
更新您的架构如下:
export const studentSchema = z
.object({
name: z.string().min(1).max(20),
nickname: z.string().min(1).max(20),
})
.or(
z.object({
name: z.string().min(1).max(20),
other: z.string().min(1).max(14),
}),
);