4

タイプスクリプトで短絡しない方法で状態を評価する方法は? &Typescript はブール型またはブール型を許可しません|。非短絡チェックが必要な理由は、 function で 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 errors を呼び出すことを常に考えています。

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 に答える