Zod 模式允许对象中的属性之一

问题描述 投票:0回答:1

我有一个具有强制

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"
}
zod
1个回答
0
投票

更新您的架构如下:

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),
    }),
  );
© www.soinside.com 2019 - 2024. All rights reserved.