[解決済み】tslint / codelyzer / ng lintのエラーです。"for (... in ...) 文は、if 文でフィルタリングする必要があります"
質問
Lintのエラーメッセージです。
src/app/detail/edit/edit.component.ts[111, 5]: for (... in ...) 文は、if文でフィルタリングする必要があります。
コードスニペット(動作するコードです。また、以下のサイトでも公開されています。 angular.ioフォームバリデーション部 ):
for (const field in this.formErrors) {
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.dirty && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
this.formErrors[field] += messages[key] + ' ';
}
}
}
このlintエラーを修正する方法に心当たりはありますか?
解決方法は?
への 実際の問題を説明する からの引用です。 のJavaScriptドキュメントを参照してください。 for...in ステートメント :
このループはオブジェクトのすべての列挙可能なプロパティに対して反復します。 と、そのオブジェクトのコンストラクタのプロトタイプから継承するもの (プロトタイプチェーンでよりオブジェクトに近いプロパティは プロトタイプのプロパティ)。
つまり、基本的には(オブジェクトのプロトタイプチェーンから)期待しないようなプロパティが得られるということです。
これを解決するには、オブジェクト自身のプロパティのみを繰り返し処理する必要があります。これには2つの方法があります(@Maxxxと@Qwertiyが提案した方法)。
第一の解決策
for (const field of Object.keys(this.formErrors)) {
...
}
ここでは オブジェクト.キー() このメソッドは、与えられたオブジェクト自身の列挙可能なプロパティの配列を、for...inループで提供されるのと同じ順序で返します(for-inループはプロトタイプチェーン内のプロパティも列挙するという違いがあります)。
第二の解決策
for (var field in this.formErrors) {
if (this.formErrors.hasOwnProperty(field)) {
...
}
}
このソリューションでは、プロトタイプチェーンにあるものを含むオブジェクトのすべてのプロパティを反復処理しますが、その際に Object.prototype.hasOwnProperty() このメソッドは、オブジェクトが指定されたプロパティを自身のプロパティとして(継承されていない)持っているかどうかを示すブール値を返し、継承されたプロパティを除外するために使用します。
関連
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み】Angular 6 エラー表示から 'mat-form-field' は既知の要素ではありません。
-
[解決済み】serveコマンドを使用するには、angular-cliプロジェクト内にいる必要があります。
-
[解決済み】Angular: オブジェクトをサポートしているdiffが見つからない '[object Object]'
-
[解決済み] Visual Code で未定義のプロパティ 'thisCompilation' を読み取ることができません。
-
[解決済み] Angular CLIでコンポーネントの名前を変更する方法は?
-
[解決済み] Uncaught (in promise): Ionic 2でcordova_not_available。
-
[解決済み] パーサエラーです。式が期待される場所で補間({{}})を得た
-
[解決済み] switchの使用時に「ステートメントはif文でフィルタリングされなければならない」というtslintのクレームが発生する。
-
[解決済み] Angular 6でmouseoverとmouseoutを使用する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular 6 エラー表示から 'mat-form-field' は既知の要素ではありません。
-
[解決済み】Angularで実際のエラーメッセージの代わりに「Http failure response for (unknown url): 0 Unknown Error」が表示されるのですが。
-
[解決済み] 型 '{}' は型 '{ title: string; text: string; }' に代入できません。
-
[解決済み] イオン4オブザーバブル
-
[解決済み] パーサエラーです。式が期待される場所で補間({{}})を得た
-
[解決済み] Angular 6 Error trying to diff '[object Object]'. 配列と反復記号のみが許可されます。
-
[解決済み] switchの使用時に「ステートメントはif文でフィルタリングされなければならない」というtslintのクレームが発生する。
-
[解決済み] Angularで電話番号の入力をフォーマットする
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み】TypeScript、辞書のループ処理