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

如何在TypeScript中使用Yup实现枚举数组的精准类型校验

直接修改你的schema定义即可,Yup不支持直接传入枚举类型作为数组项的校验规则,需要用mixed.oneOf绑定枚举的所有可选值,同时配合TypeScript泛型保证类型精确匹配。

修正后的完整代码如下:

import { object, array, mixed } from "yup";

enum DayEnum {
  Sunday = "Sunday",
  Monday = "Monday",
  Tuesday = "Tuesday",
  Wednesday = "Wednesday",
  Thursday = "Thursday",
  Friday = "Friday",
  Saturday = "Saturday"
}

const daysSchema = object({
  // 用mixed绑定枚举泛型,oneOf传入枚举所有允许值
  days_of_week: array(mixed<DayEnum>().oneOf(Object.values(DayEnum)))
});

const main = async () => {
  console.log(
    await daysSchema.isValid({
      days_of_week: [DayEnum.Sunday, DayEnum.Saturday]
    })
  ); // 输出true
};

main();

补充说明:

  • Object.values(DayEnum)会自动提取枚举的所有可选值,不需要手动枚举,后续修改枚举时校验规则会自动同步
  • 给mixed传入DayEnum泛型可以保证TypeScript类型校验完全对齐你的枚举定义,不会出现类型不匹配问题
  • 可以根据需求链式追加其他校验规则,比如要求数组非空可以加.required(),限制最多选3天可以加.max(3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:48:03