joi

joi enum typescript Валидация значения - из перечислимого типа, один из нескольких енамов

Пусть у нас есть некий enum ColumnType и мы хотим ограничить его знчениями некое поле field, тогда вариант :

export const valuesByFieldDtoSchema = joi.object({
 field: joi.string().allow(ColumnType).required(),

-- работать не будет.

Рабочим решением является вариант:

export const valuesByFieldDtoSchema = joi.object({
  field: joi
    .string()
    .valid(...Object.values(ColumnType))
    .required(),

Выбор из нескольких enum-ов

joi Переопределение сообщения об ошибке

Используйте объект с ключами внутри .messages() чтобы задать разные сообщения об ошибках, например:

const userId = joi.string().email({ tlds: { allow: false } });

export const someDtoSchema = joi.object({
  detailsId: joi.number().required(),
  usersIds: joi.array().items(userId).required().messages({
    'string.email': 'Should be email!',
  }),
});

-- напр. в данном случае сообщение

Should be email!

joi Число или строка number, string or null пример

Например так:

const stringOrNull = joi.string().allow(null, '');
const numberOrNull = joi.number().allow(null);

const someData = joi.object({
  id: joi.number().required(),),
  stringField: stringOrNull.required(),
  numberField: numberOrNull.required(),
});

joi enum typescript Работа с перечислимым типом

Можно попробовать что-то вроде:

import * as joi from 'joi';

permission: joi
     .string()
     .required()
     .valid(...Object.values(SomeMyEnum)),

Namespace 'Joi' has no exported member 'extractType' Ошибка

Нормальное на данный момент решения описано тут: https://github.com/TCMiranda/joi-extract...

Нужно будет создать свое описание типа в @types

nestjs joi Отладка валидации входных данных для контроллеров

Просто уберем джои из аннотаций и проведем проверку в теле метода контроллера, например:

[!] joi Примеры

joi OR ИЛИ Строка или пользовательский тип

Используйте joi.alternatives().try()

Например:

joi.alternatives().try(
  joi.string().allow(null, ''), // или строка (пустая или нал допустима)
  joi.object({ // или объект с двумя полями
	start: joi.string().allow(null, ''),
	end: joi.string().allow(null, ''),
  }),
),

Продробнее:

Subscribe to RSS - joi