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

如何使用zod.nativeEnum排除枚举中的指定项?

Zod枚举排除指定项的正确实现方法

你定义的Color枚举如下:

enum Color {
  Red = 'red',
  Green = 'green',
  Blue = 'blue',
}

你之前尝试的.not(Color.Red)写法错误,因为z.nativeEnum().not()方法需要传入Zod类型而非直接的枚举值。下面是三种可行的解决方案:

方法一:用z.enum手动构建允许的枚举值列表

先过滤掉不需要的枚举项,再用z.enum创建验证规则:

// 筛选出允许的颜色值
const allowedColors = Object.values(Color).filter(color => color !== Color.Blue);

// 创建Schema,类型断言确保Zod识别为字面量元组
const schema = z.object({
  color: z.enum(allowedColors as [typeof Color.Red, typeof Color.Green]),
});

方法二:用z.nativeEnum结合refine自定义验证

保留原生枚举的基础验证,再通过refine添加排除规则:

const schema = z.object({
  color: z.nativeEnum(Color).refine(
    color => color !== Color.Blue,
    { message: '颜色不能为Blue' }
  ),
});

方法三:用z.nativeEnum结合not和literal

给not传入z.literal包装的枚举值,精准排除指定项:

const schema = z.object({
  color: z.nativeEnum(Color).not(z.literal(Color.Blue)),
});

内容的提问来源于stack exchange,提问作者Sufail Kalathil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:40:44