2016-10-26 10 views
0

Angular 'Cookbook'セクションのリアクティブフォームの検証を暗示しようとしましたが、ここで見ることができます:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#reactiveオブジェクト型のインデックスシグネチャは、Angular 2の公式ドキュメントに暗黙的に 'any'型を持っています

私はこの問題をGoogleにしようとしましたが、実際に解決策を見つけることができませんでした。

エラーコードは次のとおり

onValueChanged(data?: any) { 
    if (!this.form) { return; } 
    const form = this.form; 

    for (const field in this.formErrors) { 
     // clear previous error message (if any) 
     this.formErrors[field] = ''; // This sends a error code 
     const control = form.get(field); 

     if (control && control.dirty && !control.valid) { 
      const messages = this.validationMessages[field]; // This sends a error code 
      for (const key in control.errors) { 
       this.formErrors[field] += messages[key] + ' '; // This sends a error code 
      } 
     } 
    } 
} 

formErrors = { 
    'imei': '', 
    'deviceTypeId': '' 
}; 

validationMessages = { 
    'imei': { 
     'required': 'Imei is required.', 
     'minlength': 'Imei must be at least 4 characters long.', 
     'maxlength': 'Imei cannot be more than 24 characters long.', 
    }, 
    'deviceTypeId': { 
     'required': 'Device Type is required.' 
    } 
}; 

I:オブジェクトタイプの

インデックス署名は暗黙的に '任意の' タイプコード次が使用されている

を有します私が何か重要なことを見逃しているのだろうか?残りのコードはフォーム検証ガイドに似ています。

答えて

1

これは、明示的にインデックスシグネチャタイプを指定することで解決できます。たとえば:あなたはこれらのエラーを無視する場合

formErrors:{ [key: string] : string; } = { 
    ... 
}; 

validationMessages:{ [key: string] : { [key: string] : string; } } = { 
    ... 
}; 

あなたは今述べたメンバー(例えばformErrors:any)の種類としてanyを指定するかsuppressImplicitAnyIndexErrorsコンパイラオプションを使用することができます。

+0

公式文書ではこれを行う必要はありませんが、私は何故ですか? –

+0

_noImplicitAny_コンパイラオプションが有効になっていると思います。 –

+0

これは本当ですが、これをデフォルトでtrueまたはfalseに設定する方が良いでしょうか? –

関連する問題