typescript - 即使在检查后也出现“对象可能未定义”错误
问题描述
访问该length
属性时出现错误。我知道我可以通过只检索一次对象然后执行undefined
-check 来解决问题。或者简单地添加一个!
. 但我想了解为什么会发生这种情况,并找出是否有更好的解决方案。这是人为的示例:
type MyMap<K extends string> = { [key in K]: string|undefined }
const getValueLength = (tmp:MyMap<string>, key:string) => {
return tmp[key] !== undefined && tmp[key].length
}
我在严格模式下运行 typescript 3.3。
这是一个类似的问题,问题是在另一个函数内部进行了检查,这不是这里的问题。
解决方案
访问密钥被视为一个函数调用,它可能会改变您正在查看的对象/值,因此不能保证第一次和第二次调用tmp[key]
会找到相同的东西。
为避免这种情况,请确保您只调用一次:
type MyMap<K extends string> = { [key in K]: string | undefined };
const getValueLength = (tmp: MyMap<string>, key: string) => {
const str = tmp[key];
return str !== undefined && str.length;
};
推荐阅读
- xcode - 合并与 xcschememanagement.plist 相关的分支时出现 Xcode 错误
- macos - 插入时 Elasticsearch 显示错误 406
- asp.net-mvc - "值不能为空。\r\n参数名称:输入"
- javascript - 包装
- java - java.util.Base64 不适用于 8.0 以下的 Android 版本
- css - 如何对齐html5视频标签和图片标签
- arrays - 使用 tabArray 时如何跳过单元格?
- xilinx - Vivado:在 Tools->Create-and-Package-New-IP 之后,components.xml 输出做什么?
- r - 如何计算不包括自己公司的行业中位数
- azure - Microsoft Graph Explorer 为用户返回空的 businessPhones