如何在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
相关产品推荐
相关产品推荐

