#node.js #typescript #joi
#node.js #typescript #joi
Вопрос:
{
"visibleFields": {
"design.content.buttons.action.type": {
"SHOW_CLOSE": true,
"URL": true,
"CALL_PHONE": true
},
"design.content.formFields": false,
"success": false,
"design.appearance.closeButtons": true,
"design.appearance.backgroundOverlay": true,
"design.appearance.button": true,
"design.content.privacyPolicy": false,
"design.content.wheel": false,
"design.appearance.formFields": false,
"design.content.description": true,
"design.appearance.customCss": true,
"design.content.headline": true,
"design.appearance.displayEffect": true,
"design.layout.floatingbar": true,
"design.layout": true,
"design.appearance.body": true,
"design.content.buttons": true,
"design.content.images": false
}}
У меня есть конструкция json, как указано выше. Я хочу получить «visibleFields.design.content.images» с помощью ссылки, но это не работает. Обычно я могу получить к нему доступ, используя «visibleFields [‘design.content.images’]», как это, но я не смог добиться этого в схеме. Как я могу решить эту проблему?
images: Joi.when(Joi.ref('...visibleFields.design.content.images'), {
is: false,
then: Joi.array().length(0),
otherwise: Joi.array().items(
Joi.object().keys({
type: Joi.string(),
label: Joi.string(),
backgroundColor: Joi.string(),
size: Joi.number().integer(),
horizontal: Joi.number().integer(),
vertical: Joi.number().integer(),
repeatMode: Joi.string(),
hide: Joi.boolean(),
value: Joi.string().uri(),
}),
),
})
Ответ №1:
Вы можете удалить .
разделитель с { seperator: false }
помощью опции
images: Joi.when(Joi.ref('...visibleFields.design.content.images', { seperator: false }), {
is: false,
then: Joi.array().length(0),
otherwise: Joi.array().items(
Joi.object().keys({
type: Joi.string(),
label: Joi.string(),
backgroundColor: Joi.string(),
size: Joi.number().integer(),
horizontal: Joi.number().integer(),
vertical: Joi.number().integer(),
repeatMode: Joi.string(),
hide: Joi.boolean(),
value: Joi.string().uri(),
}),
),
})