У меня есть следующая схема Typescript:
export interface LiveDate {
production: string,
test?: string
}
interface Widget {
name: string,
path: string
}
interface Manifest {
livedate?: LiveDate,
'trusted-types'?: string[],
widgets?: Widget[]
}
И следующая схема Joi:
const liveDateSchema: Joi.ObjectSchema = Joi.object<LiveDate>().keys({
production: Joi.date().iso().required(),
test: Joi.date().iso().optional()
})
const widgetSchema: Joi.ObjectSchema<Widget> = Joi.object<Widget>().keys({
name: Joi.string().required(),
path: Joi.string().required()
})
const manifestSchema: Joi.ObjectSchema<Manifest> = Joi.object<Manifest>().keys({
'livedate': liveDateSchema.optional(),
'trusted-types': Joi.string().optional(),
'widgets': Joi.array().items(widgetSchema).optional()
})
Я не совсем понимаю, как настроить условное logi c (приношу свои извинения за то, что это ссылка с версией), так что если присутствует livedate
, то Joi должен подтвердить, что livedate.production
- это строка даты ISO. В его нынешнем виде, если я установил livedate.production
на not a date string
, мой тест по-прежнему проходит, и я думаю, это связано с тем, что livedate
помечен как optional
в моем объекте manifestSchema
, поэтому он не выполняет проверку даты.