2016-10-20 50 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不是強制性的。我希望這是有道理的。