Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制一个属性仅在另一个属性为真时才出现?_Javascript_Joi - Fatal编程技术网

Javascript 如何强制一个属性仅在另一个属性为真时才出现?

Javascript 如何强制一个属性仅在另一个属性为真时才出现?,javascript,joi,Javascript,Joi,我正在尝试使用Joi验证一个简单的对象。我定义的模式如下所示: const singleReq = Joi.object({ subscribing: Joi.boolean(), duration: Joi.number().integer().positive(), }); 我希望duration仅在subscribing为true时出现(不为空)。我试图用资产来做这件事,但我不知道怎么做。您可以尝试以下方法: const singleReq = Joi.objec

我正在尝试使用Joi验证一个简单的对象。我定义的模式如下所示:

const singleReq = Joi.object({  
    subscribing: Joi.boolean(),  
    duration: Joi.number().integer().positive(),
});

我希望
duration
仅在
subscribing
为true时出现(不为空)。我试图用资产来做这件事,但我不知道怎么做。

您可以尝试以下方法:

const singleReq = Joi.object({  
  subscribing: Joi.boolean(),  
  duration: Joi.number()
  .when('subscribing', { is: true, then: Joi.integer().positive().required() })
});
如果您想要更改类型,您也可以尝试使用类似以下示例的替代方案:

const schema = {
  a: Joi.alternatives().when('b', { is: 5, then: Joi.string(), otherwise: Joi.number() }),
  b: Joi.any()
};

谢谢!这正是我所需要的!