[解決済み] switchの使用時に「ステートメントはif文でフィルタリングされなければならない」というtslintのクレームが発生する。
2022-02-14 23:01:17
質問事項
次のようなメソッドがあるとします。
getErrorMessage(state: any, thingName?: string) {
const thing: string = state.path || thingName;
const messages: string[] = [];
if (state.errors) {
for (const errorName in state.errors) {
switch (errorName) {
case 'required':
messages.push(`You must enter a ${thing}`);
break;
case 'minlength':
messages.push(`A ${thing} must be at least ${state.errors['minlength'].requiredLength}characters`);
break;
case 'pattern':
messages.push(`The ${thing} contains illegal characters`);
break;
case 'validateCardNumberWithAlgo':
messages.push(`Card doesnt pass algo`);
break;
}
}
}
return messages;
}
を実行すると
ng lint
次のようなエラーが発生します。
for (... in ...) 文は、if 文でフィルタリングする必要があります。
似たようなものを見てみると 質問 その回答は、私の状況には当てはまらないと思います。結局のところ、switch文はif-else-ifのラダーのカテゴリに位置します。
tslintはswitch文をif文の一種と考えるべきですが、そうではありませんか?
どうすればいいですか?
これは気になったので、調べてみると
TSlintのソースコード
このルールの という関数があります。
isFiltered
をチェックするだけのようです。
ts.SyntaxKind.IfStatement
ではなく
ts.SyntaxKind.SwitchStatement
.
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
.
関連
-
[解決済み】Angular 6 エラー表示から 'mat-form-field' は既知の要素ではありません。
-
[解決済み】本番モードを有効にするには?
-
[解決済み] イオン4オブザーバブル
-
[解決済み] ag-gridで「表示する行がありません」テキストをプログラムで変更するにはどうすればよいですか?
-
[解決済み] ブレークポイントの解除 - VS Code | Chrome | Angular
-
[解決済み] Angular2: [(ngModel)] with [ngModelOptions]="{standalone: true}"を使って、モデルのプロパティへの参照にリンクさせる。
-
[解決済み] Angularアプリのシンタックスエラー。予期しないトークン <
-
[解決済み] モジュール 'ngx-cookie-service' が見つかりません。
-
[解決済み] Angular 2 : NgModule のメタデータが見つかりません。
-
[解決済み】tslint / codelyzer / ng lintのエラーです。"for (... in ...) 文は、if 文でフィルタリングする必要があります"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】VSCodeはモジュール'@angular/core'や他のモジュールを見つけることができません。
-
[解決済み】angular 4アプリにReactiveFormsModuleを追加すると、NgControl用のプロバイダがないエラーが発生する。
-
[解決済み】エラー。どのルートにもマッチしません。URLセグメント: - Angular 2
-
[解決済み] Visual Code で未定義のプロパティ 'thisCompilation' を読み取ることができません。
-
[解決済み] NullInjectorError: MatDialogRef 用のプロバイダがありません
-
[解決済み] Angular2 Final Release - 「Error: AngularにはZone.jsのプロリフィルが必要です"
-
[解決済み] ionInputとionChangeで有意差あり
-
[解決済み] なぜ mat-tables matRowDef は 2 つの変数を含むのですか?
-
[解決済み】tslint / codelyzer / ng lintのエラーです。"for (... in ...) 文は、if 文でフィルタリングする必要があります"
-
[解決済み】JSLintのエラー「body of a for in should be wrapped in in if statement」はどういう意味ですか?