我正在json架构中创建一个Avatar
,在我的应用中,如果我们要隐藏头像,我们会将其传递为false
,否则,一个头像会有一个图像和一个名。
在json架构中,我将头像指定为
const avatarSchema = {
"type": ["object", "boolean"],
"required": [],
"additionalProperties": false,
"properties":{
"name": {
"type": "string"
},
"image": {
"type": "string",
"format": "url"
}
}
};
这不起作用,因为如果Avatar = true
,'image' does not exist on type 'Avatar'.
Property 'image' does not exist on type 'true'.
我不希望每个Avatar
true
,false
或{image, name}
,我如何告诉json架构以这种方式运行?
答案 0 :(得分:2)
您对架构不起作用的原因的解释是不正确的。仅当验证的数据是对象时,required
,additionalProperties
和properties
关键字才适用。因此,架构应该按照您的需要工作,除了它可以具有值“true”。
如果您使用的验证程序正在提供错误消息,例如问题中的错误消息,则表明它未正确验证。您应该为该验证器提交错误报告。
无论如何,问题的解决方案需要anyOf
关键字。
{
"anyOf": [
{ "enum": [false] },
{
"type": "object",
"required": ["name", "image"],
"additionalProperties": false,
"properties": {
"name": { "type": "string" },
"image": {
"type": "string",
"format": "url"
}
}
}
]
}