Lint错误信息:

Src /app/detail/edit/ edit.ponent .ts[111, 5]: for(…在…) 语句必须使用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错误?


当前回答

如果for的行为……)对于您的目的是可接受的/必要的,您可以告诉tslint允许它。

在tslint。Json,将其添加到“规则”部分。

"forin": false

否则,@Maxxx的想法是正确的

for (const field of Object.keys(this.formErrors)) {

其他回答

如果for的行为……)对于您的目的是可接受的/必要的,您可以告诉tslint允许它。

在tslint。Json,将其添加到“规则”部分。

"forin": false

否则,@Maxxx的想法是正确的

for (const field of Object.keys(this.formErrors)) {
for (const field in this.formErrors) {
  if (this.formErrors.hasOwnProperty(field)) {
for (const key in control.errors) {
  if (control.errors.hasOwnProperty(key)) {

使用@Helzgate的回复的一个更简洁的方法可能是替换你的“for ..”在“

for (const field of Object.keys(this.formErrors)) {

我认为这条信息不是关于避免使用开关。相反,它希望你检查hasOwnProperty。背景可以在这里阅读:https://stackoverflow.com/a/16735184/1374488

用种:

Object.keys(this.formErrors).map(key => {
  this.formErrors[key] = '';
  const control = form.get(key);

  if(control && control.dirty && !control.valid) {
    const messages = this.validationMessages[key];
    Object.keys(control.errors).map(key2 => {
      this.formErrors[key] += messages[key2] + ' ';
    });
  }
});