错误'Cannot invoke an object which is possible undefined'



以下是属性和方法

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);

最新更新