Получите все поля в схеме Joi, которые являются опциональными

#hapijs

Вопрос:

Как мне получить массив или список имен полей, которые были установлены в качестве необязательных в объекте Joi?

Например:

 export const schema = Joi.object<SomeType>({
  field1: Joi.string().required(),
  field2: Joi.string().guid(),
  field3: Joi.string().allow('').optional(),
  field4: Joi.string().allow('').optional(),
});
 

Я должен быть в состоянии восстановить поле 3, поле 4.

Хапи Дзеи https://www.npmjs.com/package/@hapi/joi

Ответ №1:

Вы можете использовать describe для этого:

Возвращает объект, представляющий внутреннюю конфигурацию схемы. Полезно для отладки и предоставления конфигурации схемы другим системам, например, допустимых значений в пользовательском интерфейсе.

И вот мы начинаем:

 for (const [key, value] of Object.entries(queueSchemaBase.describe().keys)) {
  if (value.flags?.presence === 'optional') {
    console.log(`${key} is optional`);
  }
}
 

Выход:

 field3 is optional
field4 is optional