我在角色2中的反应验证时遇到编译错误,这是
错误TS7017:对象类型的索引签名隐式具有“任意” 型
有关
ActiveX
它正在运行,但是当我试图运行npm运行build.prod时,发生错误并且不构建我的项目
这是我的代码:
this.comErrors[field] = '';
const messages = this.validationMessages[field];
this.comErrors[field] += messages[key] + ' ';
答案 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
模块。用于运行时类型检查。