【问题标题】:Index signature of object type implicitly has an 'any' type in Angular 2 official documentation对象类型的索引签名在 Angular 2 官方文档中隐式具有“任何”类型
【发布时间】:2016-10-26 18:50:55
【问题描述】:

当我尝试实现 Angular 'Cookbook' 部分的响应式表单验证时出现错误,您可以在此处观看:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#reactive

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

错误代码是:

对象类型的索引签名隐式具有“任何”类型

正在使用以下代码

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

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

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    您可以通过明确指定索引签名类型来解决此问题。例如:

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

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

    【讨论】:

    • 官方文档不需要做这个,我做有什么原因?
    • 我猜你启用了 noImplicitAny 编译器选项。
    • 是的,默认设置为 true 还是 false 更好?
    • 这是选择的问题。我个人更喜欢启用它 - 更严格的类型检查。
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 2016-04-07
    • 2017-05-06
    • 2017-08-03
    • 1970-01-01
    • 2021-08-24
    • 2021-08-22
    • 2017-08-02
    相关资源
    最近更新 更多