2016-10-26 4 views
0

У меня возникла ошибка, когда я попытался рассказать о проверке Reactive Form в разделе «Поваренная книга», вы можете посмотреть здесь: https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#reactiveИндексная подпись типа объекта неявно имеет тип «any» в официальной документации Angular 2

Я попытался решить эту проблему, но не смог найти решение.

Код ошибки:

подпись индекса типа объекта неявно имеет 'любой' тип

Следующая код используется:

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; } } = { 
    ... 
}; 

Если вы хотите, чтобы игнорировать эти ошибки, вы можете просто указать any как тип упомянутых элементов (например formErrors:any) или использовать suppressImplicitAnyIndexErrors опцию компилятора.

+0

Есть ли причина, по которой официальные документы не нужны, но я делаю? –

+0

У меня есть опция _noImplicitAny_ компилятора. –

+0

Это правда, лучше ли это иметь значение true или false по умолчанию? –