Как сделать условие не короткого замыкания в Typescript?

Как оценить состояние без короткого замыкания в машинописи? Машинопись не позволяет & или же | для логического типа. Причина, по которой мне нужна проверка без короткого замыкания, заключается в том, что я вызываю функцию 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. На самом деле, я всегда думаю вызывать show error по умолчанию всякий раз, когда возникает ошибка.

2 ответа

Решение

Чтобы ответить на ваш вопрос, вы можете сделать

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
}

Если вы хотите использовать функции с побочными эффектами (что в общем-то не очень хорошая идея), это может помочь очень четко определить, что вызывается и когда:

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

   if (value1Valid && value2Valid) {
        // submit data
   }
Другие вопросы по тегам