对象类型的索引签名在 Angular 2 官方文档中隐式具有'any'类型



当我试图实现Angular 'Cookbook'部分的响应式表单验证时,出现了一个错误,你可以在这里查看:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#无功

我试着用谷歌搜索这个问题,但我找不到解决办法。

错误码为:

对象类型的索引签名隐式地具有'any'类型

正在使用以下代码:

  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.'
    }
};

我想知道我是否错过了一些重要的东西?我的代码的其余部分类似于表单验证指南。

可以通过显式指定索引签名类型来修复此问题。例如:

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

如果你想忽略这些错误,你可以指定any作为提到的成员类型(例如formErrors:any)或使用suppressImplicitAnyIndexErrors编译器选项。

最新更新