2016-10-20 47 views
0

我正在使用Joi库来验证对象。当另一个可选属性(与同一对象的同一级别)具有某种类型时,我想创建一个必需的属性,例如串。该文档穰显示这个例子:Joi'when/is'语法 - 如何检查类型?

const schema = { 
    a: Joi.when('b', { is: true, then: Joi.required() }), 
    b: Joi.boolean() 
}; 

然而,而不是检查B(例如)是真的,我想检查它是否是一个字符串。我试过这个:

const schema = { 
    a: Joi.when('b', { is: Joi.string(), then: Joi.required() }), 
}; 

但它似乎没有工作。如果我完全从对象中删除b,那么Joi似乎仍然期望a被要求。如果b不在对象中,我不希望对a进行验证。

我找不到任何其他人做这个例子 - 任何人都可以帮忙吗?

回答

0

我们设法用object.with来解决这个问题。如果存在一个密钥(例如a),则其同伴也必须存在(例如b)。

但是,这并不理想,因为尽管我们能够指定a应该是Joi.string(),但object.with正在寻找它的存在而不是它的类型。所以如果出现一个非字符串a,则应该抛出一个'应该是字符串'的错误。对于不是一个字符串应该是非常好的 - 所有这一切应该意味着b不是强制性的。我希望这是有道理的。