问题描述
我正在尝试验证一些相互依赖的温度值,但我也想为它们接受空值。例如,我有以下代码:
VadliationRules.customrule(
"minT",(value,obj: Object,min) => {
let converted = parseFloat(value)
return converted >= min && converted < obj.MaxTemperature
},'');
ValidationRules.customrule(
"maxT",max) => {
let converted = parseFloat(value)
return converted <= max && converted > obj.MinTemperature
},'');
ValidationRules
.ensure((p: Object) => p.MinTemperature)
.satisfiesRule('minT',-15.0)
.withMessageKey('min_temp')
.ensure((p: Object) => p.MaxTemperature)
.satisfiesRule('maxT',50.0)
.withMessageKey('max_temp')
.on(Object)
let MinTemperature : number;
let MaxTemperature : number;
我尝试了以下选项,但它们似乎不起作用(因为我想依赖于其他属性)
// Example 1
VadliationRules.customrule(
"minT",min) => {
let converted = parseFloat(value)
return converted >= min && converted < obj.MaxTemperature || converted == undefined || obj.MaxTemperature == null
},'');
// Example 2
VadliationRules.customrule(
"minT",min) => {
let converted = parseFloat(value)
return converted >= min && converted < obj.MaxTemperature || converted == undefined || converted.toString() == ""
},'');
如何满足两个字段对其他属性的依赖,同时接受两个字段的空值?
解决方法
尝试以下
return converted >= min && (converted < obj.MaxTemperature || obj.MaxTemperature == null)
- 当不使用括号时,如果您的obj.MaxTemperature == null,则无论您是否进行第一次检查都将通过
- FYI,obj.MaxTemperature == null还会检查未定义的内容,因此您可以忽略该部分(请参见http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3)