Joi'when/is'语法 - 如何检查类型?
问题描述:
我正在使用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进行验证。
我找不到任何其他人做这个例子 - 任何人都可以帮忙吗?
答
我们设法用object.with来解决这个问题。如果存在一个密钥(例如a),则其同伴也必须存在(例如b)。
但是,这并不理想,因为尽管我们能够指定a应该是Joi.string(),但object.with正在寻找它的存在而不是它的类型。所以如果出现一个非字符串a,则应该抛出一个'应该是字符串'的错误。对于不是一个字符串应该是非常好的 - 所有这一切应该意味着b不是强制性的。我希望这是有道理的。