4

如何在打字稿中以非短路方式评估条件?打字稿不允许&|布尔类型。我需要非短路检查的原因是我在函数中调用 showErrors isValueValid

鉴于此功能

function isValue1Valid(){
  if(value1 === 0) return true;    
  showErrors1();
  return false;
}

function isValue2Valid(){
  if(value2 === 0) return true;    
  showErrors2();
  return false;
}

然后在我的情况下

if(isValue2Valid() & isValue2Valid()){
//Submit data
}

虽然我可以做到这一点

if(isValue2Valid() & isValue2Valid()){
//Submit data 
   return;
}
showErrors1()
showErrors2()

但我觉得在 isValueValid 函数中调用它。实际上,我总是想在出现错误时默认调用显示错误。

4

2 回答 2

5

要回答您的问题,您可以这样做

if ([isValue2Valid(), isValue2Valid()].every(Boolean)) {
    //Submit data
}

评估所有函数调用,然后组合它们的值。但是你真的不应该首先isValueValid打电话showError。相反,让您的测试功能return成为错误消息,然后如果有的话,显示它们:

function getValue1Error() {
    if (value1 === 0) return null;
    else return "error1";
}

function getValue2Error() {
    if (value2 === 0) return null; 
    else return "error2";
}

// then:
const errors = [getValue1Error(), getValue2Error()] // or even better, just a loop over your fields
if (errors.some(Boolean)) {
    for (let error of errors)
        showError(error);
} else {
    // Submit data
}
于 2016-09-21T22:04:13.330 回答
3

如果您想使用具有副作用的函数(这通常不是一个好主意),那么非常明确地说明调用的内容和时间可能会有所帮助:

   var value1Valid = isValue1Valid(); // might show some messages
   var value2Valid = isValue2Valid(); // might show some more messages

   if (value1Valid && value2Valid) {
        // submit data
   }
于 2016-09-21T21:43:21.960 回答