错误TS7017:对象类型的索引签名隐式地在表单验证角度2中具有“任何”类型

时间:2017-03-13 08:37:40

标签: javascript angular typescript

我在角色2中的反应验证时遇到编译错误,这是

  

错误TS7017:对象类型的索引签名隐式具有“任意”   型

有关

ActiveX

它正在运行,但是当我试图运行npm运行build.prod时,发生错误并且不构建我的项目

这是我的代码:

this.comErrors[field] = '';
const messages = this.validationMessages[field];
this.comErrors[field] += messages[key] + ' ';

4 个答案:

答案 0 :(得分:24)

那是因为编译器推断出validationMessages的类型,而且这种类型不是indexable
编译器需要将this.validationMessages强制转换为any,但您(可能)使用导致错误的--noImplicitAny标志。

你可以这样做:

const messages = (this.validationMessages as any)[field];

或者您可以将其转换为可索引类型:

type ValidationMessage = {
    required: string;
    minlength?: string;
    maxlength?: string;
}

type ValidationMessages = {
    [name: string]: ValidationMessage;
}

class A {
    validationMessages: ValidationMessages = {
        ...
    }

    ...
}

答案 1 :(得分:2)

使用对象解构,你可以修复:

const {[field]:messages} = this.validationMessages;

答案 2 :(得分:1)

要在不知道值是什么的情况下声明一个对象,但您知道键的类型将是字符串:

const myObject: {[key: string]: any} = {}

答案 3 :(得分:0)

只需为您要获取此错误的字段添加类型。如果定义了类型,则某种程度上它不会检测到。您将需要对其进行跟踪并正确定义类型。

可选:此外,您还可以使用io-ts模块。用于运行时类型检查。