2017-05-30 12 views
2

を使用して、私は次のような方法を考えてみましょう「の文は、if文で濾過されなければならない」tslintスイッチ

for(... in ...)文は、if文でフィルタリングする必要があります。

類似のものを見ているのはquestionなので、その答えが私の状況に当てはまるとは思わない。すべてのswitch文がif-else-ifラダーのカテゴリに入ると、

tslintはswitch文をif文の形式とみなすべきですが、そうではありませんか?

+0

スイッチの代わりにelseを使用していますか? – toskv

+0

私は100の条件をチェックすると同じことをお勧めしますか? – MHOOS

+0

私は実際にあなたの内部のループを別のものにリファクタリングすることをお勧めします。 :)メソッド呼び出し、またはエラー配列のマップを作成してエラーメッセージのリストを作成することができます。 :) – toskv

答えて

5

これは私にとって不思議だったので、私はこのルールのためにTSlint source codeをチェックアウトしました。 ts.SyntaxKind.SwitchStatementではなく、ts.SyntaxKind.IfStatementをチェックするように見えるisFilteredという機能があります。

function isFiltered({statements}: ts.Block): boolean { 
    switch (statements.length) { 
     case 0: return true; 
     case 1: return statements[0].kind === ts.SyntaxKind.IfStatement; 
     default: 
      return statements[0].kind === ts.SyntaxKind.IfStatement && nodeIsContinue((statements[0] as ts.IfStatement).thenStatement); 
    } 

} 

オブジェクトを配列に変換しない場合は、指定したリンクから修正を使用する必要があります。 Object.keys、またはifステートメントの次のいずれかの

for (const errorName in state.errors) { 
     if (state.errors.hasOwnProperty(errorName)) { 
     switch (errorName) { 

興味深いのは、あなたがifのステートメントのいずれかの種類を持つことができますし、エラーが離れて行くだろうということです。 hasOwnPropertyに電話しているかどうかは確認できません。

1

このルールは、の..を使用しているときにオブジェクトプロトタイプで定義されたプロパティにアクセスできないようにするためのものです。

ただし、コードをリファクタリングして使用するだけで、メンテナンスや開発が容易になります。

の例は、これを次のようになります。

interface ErrorMessageFactory { 
    (thing: string, state?): string 
} 

type Errors = 'required' | 'minlength' | 'pattern' | 'validateCardNumberWithAlgo' 

let errorFactory: {[e in Errors]: ErrorMessageFactory} = { 
    required: (thing) => `You must enter a ${thing}`, 
    minlength: (thing, state) => `A ${thing} must be at least ${state.errors['minlength'].requiredLength}characters`, 
    pattern: (thing) => `The ${thing} contains illegal characters`, 
    validateCardNumberWithAlgo: (thing) => `Card doesnt pass algo` 
} 



function getErrorMessage(state: any, thingName?: string) { 
    if (state.errors) { 
    return state.errors.map((error) => errorFactory[error](thingName, state)); 
    } 
    return []; 
} 

あなたは遊び場hereで働いスニペットを見ることができます。

+1

私はあなたがそのコードをリファクタリングした方法が本当に好きです。間違いなく「ありがとう」とアップ票 – MHOOS