проверка массива перечислений в yup

#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()
});