首页 > 解决方案 > 错误“无法调用可能未定义的对象”

问题描述

这是属性和方法

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

有人可以解释为什么我会收到此错误的问题以及可能的问题解决方案吗?

标签: typescript

解决方案


因为Map.prototype.get()的返回值是与指定键关联的元素,如果未找到则未定义。您需要this.errorMessage.get(key)在调用它之前检查是否实际返回了一个函数。编译器不知道 Map.prototype.has() 应该用作类型保护,请参阅此问题以获取更多信息。

您确实使用this.errorMessages.has检查密钥是否存在,因此您可以使用 bang 运算符 (!) ( this.errorMessages.get(key)!()) 告诉编译器您确定它不能是undefined。但是,您不必在get之前调用has进行检查,因为简单地使用不存在的键调用get将返回undefined

return Object.keys(errors).map(key => this.errorMessages.get(key)?.() ?? <string>errors[key] ?? key);

推荐阅读