#typescript #yup
Вопрос:
Мне нужно проверить массив перечислений в yup.
Я использую typescript, поэтому я должен использовать точный тип перечислений во время проверки. Хотя использование массива строк, похоже, работает, я хочу проверить точный массив перечислений вместо строк. Есть ли способ добиться этого?
Я также добавил рабочий codesandbox https://codesandbox.io/s/clever-edison-3vqp1
Вот фрагмент того, что я намерен сделать
import { object, array } from "yup";
enum DayEnum {
Sunday = "Sunday",
Monday = "Monday",
Tuesday = "Tuesday",
Wednesday = "Wednesday",
Thursday = "Thursday",
Friday = "Friday",
Saturday = "Saturday"
}
const daysSchema = object({
// days_of_week: array(string()),
days_of_week: array(DayEnum)
});
const main = async () => {
console.log(
await daysSchema.isValid({
days_of_week: [DayEnum.Sunday, DayEnum.Saturday]
})
);
};
main();
Ответ №1:
Я смог решить эту проблему благодаря этому комментарию: https://github.com/jquense/yup/issues/1497#issue-1034140602
Решение выглядит следующим образом
const daysSchema = object({
days_of_week: array(
mixed<DayEnum>().oneOf(Object.values(DayEnum)).required()
).ensure()
});