You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zod是否有与Yup的oneOf()等效的属性值验证方法?

Zod 实现属性值限定为特定选项的简洁方式

在Zod里完全不需要用superRefine这种繁琐写法,有几种更简洁的方案,可根据值的类型选择:

1. 数字类型的可选值

最直接的方式是用z.union结合z.literal,明确限定允许的数字:

const schema = z.object({
  prop: z.union([z.literal(5), z.literal(10), z.literal(15)])
});

如果允许的值较多,不想逐个写z.literal,也可以用refine的简写形式,比superRefine精简很多:

const allowedValues = [5, 10, 15];
const schema = z.object({
  prop: z.number().refine(
    val => allowedValues.includes(val),
    { message: "prop 必须是 5、10、15 中的一个" }
  )
});

2. 字符串类型的可选值

如果是字符串选项,直接用z.enum即可,和Yup的oneOf用法逻辑一致:

const schema = z.object({
  prop: z.enum(["5", "10", "15"])
});

以上几种方式都能实现和Yup中oneOf相同的验证效果,代码更简洁易读。

内容的提问来源于stack exchange,提问作者Boris Boskovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:20:34