以下是属性和方法
private errorMessages = new Map<string, () => string>();
public get errors(): Array<string> {
if (!this.control) {
return [];
}
const { errors } = this.control;
return Object.keys(errors).map(key => this.errorMessages.has(key) ?
this.errorMessages.get(key)() : <string>errors[key] || key);
}
我在代码的这一部分上得到了这个错误
this.errorMessages.get(key)()
有人能解释为什么会出现这个问题,为什么我会出现这个错误,以及问题的可能解决方案吗?
因为Map.protype.get((的返回值是与指定键关联的元素,如果找不到,则为未定义。在调用this.errorMessage.get(key)
之前,您需要检查它是否真的返回了一个函数。编译器不知道Map.protype.has((应该作为类型保护,请参阅此问题以了解更多信息。
您确实使用this.errorMessages.has检查密钥是否存在,因此您可以使用bang运算符(!((this.errorMessages.get(key)!()
(来告诉编译器您确信它不能被未定义。但是,在get之前,您根本不必通过调用has来检查,因为使用不存在的密钥简单地调用get定义:
return Object.keys(errors).map(key => this.errorMessages.get(key)?.() ?? <string>errors[key] ?? key);