typescript - 错误“无法调用可能未定义的对象”
问题描述
这是属性和方法
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.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);
推荐阅读
- vue.js - 无法使用 Vuetify 获取单击按钮的 ID
- apache-spark - Spark API:在 LIKE 语句中使用列值
- python - 如何将带有 if 语句的函数同时应用于多个数据框列
- javascript - Apollo GraphQL - watchQuery 和 networkErrors 问题
- java - Spring LdapTemplate 可以流式传输结果吗?
- twitter-bootstrap-3 - 单击select2后水平显示
- azure - 无法使用 bot 框架 4.2 在 Azure 中创建 Web 应用程序机器人
- excel - Excel 代码不断崩溃,但代码中没有错误、应用程序定义或对象定义错误
- python-3.x - 条件困难的移动平均线
- c# - Visual Studio C#:将光标移动到导致内存不足的特定坐标时更改表单背景图像。我该如何解决?