You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中对象字面量报‘Object is possibly undefined’错误怎么解决?

TypeScript中解决find返回可能undefined的报错问题

在浏览器控制台的JavaScript环境中,执行以下代码可正常运行:

[{ssid: 'Test Network 1', rssi: 54},{ssid: 'Test Network 2', rssi: 60}].find((rec) => 'Test Network 1' === rec.ssid).rssi
// 输出:54

但在TypeScript应用中执行完全相同的代码时,TypeScript会提示错误:“Object is possibly 'undefined'”,请问需要修改什么才能让这段代码正常运行?

TypeScript报错的原因是Array.find()的返回值类型是数组元素类型或undefined——如果找不到匹配项,find会返回undefined,直接访问属性存在运行时风险,因此TypeScript强制要求处理这种情况。以下是几种可行的修改方式:

方法1:使用可选链操作符(推荐)

用?.替代直接.访问属性,当find返回undefined时,表达式会直接返回undefined,不会触发报错:

[{ssid: 'Test Network 1', rssi: 54},{ssid: 'Test Network 2', rssi: 60}].find((rec) => 'Test Network 1' === rec.ssid)?.rssi

方法2:添加非空断言

如果你能绝对确定目标项一定存在于数组中,可以用!告诉TypeScript忽略undefined的可能性:

[{ssid: 'Test Network 1', rssi: 54},{ssid: 'Test Network 2', rssi: 60}].find((rec) => 'Test Network 1' === rec.ssid)!.rssi

⚠️ 注意:如果实际运行时找不到对应项,这种写法会抛出运行时错误,务必确保结果一定存在。

方法3:先判断结果是否存在

通过条件语句先检查find的返回值是否有效,确认后再访问属性,这是最严谨的写法:

const targetNetwork = [{ssid: 'Test Network 1', rssi: 54},{ssid: 'Test Network 2', rssi: 60}].find((rec) => 'Test Network 1' === rec.ssid);
if (targetNetwork) {
  const rssiValue = targetNetwork.rssi;
  // 在这里使用rssiValue执行后续逻辑
}

内容的提问来源于stack exchange,提问作者Joel Joel Binks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:33:31