对象类型的索引签名隐式具有';任何';输入Angular 2官方文档

对象类型的索引签名隐式具有';任何';输入Angular 2官方文档,angular,typescript,Angular,Typescript,我在尝试对Angular'Cookbook'部分执行反应式表单验证时出错,您可以在这里查看: 我试图用谷歌搜索这个问题,但我真的找不到解决办法 错误代码为: 对象类型的索引签名隐式具有“any”类型 正在使用以下代码: onValueChanged(data?: any) { if (!this.form) { return; } const form = this.form; for (const field in this.formErrors) {

我在尝试对Angular'Cookbook'部分执行反应式表单验证时出错,您可以在这里查看:

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

错误代码为:

对象类型的索引签名隐式具有“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
),或使用SuppressImplicationIndexErrors编译器选项。

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

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

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

如果您想忽略这些错误,您可以将
any
指定为所述成员的类型(例如
formErrors:any
)或使用SuppressImplicitanIndexErrors编译器选项。

官方文档为什么不需要这样做,而我需要这样做呢?我想您没有启用Implicitany编译器选项。这是真的,这是正确的还是错误的?这是选择的问题。就我个人而言,我更喜欢启用它——更严格的类型检查。有什么理由官方文档不需要这样做,但我需要这样做吗?我想你没有启用mplicitany编译器选项。这是真的,默认情况下是真还是假更好?这是选择的问题。就个人而言,我更喜欢启用它——更严格的类型检查。