You need to enable JavaScript to run this app. 如何解决TS报错:telemetryData.get(cid)处提示object is possibly undefined
优惠活动
大模型
产品
解决方案
定价
更多

如何解决TS报错:telemetryData.get(cid)处提示object is possibly undefined

问题原因

TypeScript 无法跟踪多次调用 telemetryData.get(cid) 的返回值关联性,哪怕你前置做了 has(cid) 判断和非 undefined 校验,类型收窄规则也不会跨独立的函数调用生效,所以每次调用 get 方法时 TS 都会判定返回值有可能为 undefined,因此抛出对应错误。

解决方法

方法1:提前取值缓存(最推荐)

仅调用一次 get 方法把对应值存入本地变量,再对这个变量做类型校验,TS 就能正常完成类型收窄:

const updateLoadedCount = mutatorAction('updateLoadedCount', (cid: string) => {
    const telemetryData = getTelemetryStore()?.telemetryData;
    if (telemetryData?.has(cid)) {
        const currentData = telemetryData.get(cid);
        if (currentData !== undefined) {
            currentData.imageLoaded = currentData.imageLoaded + 1;
        }
    }
})

这种写法可读性和可维护性最高,不会埋下类型安全隐患。

方法2:非空断言快速修复(适合临时改码场景)

如果你确定当前逻辑下 get(cid) 绝对不会返回 undefined,可以手动加非空断言 ! 跳过 TS 的类型检查:

const updateLoadedCount = mutatorAction('updateLoadedCount', (cid: string) => {
    const telemetryData = getTelemetryStore()?.telemetryData;
    if (telemetryData?.has(cid)) {
        if (telemetryData.get(cid) !== undefined) {
            telemetryData.get(cid)!.imageLoaded =
                telemetryData.get(cid)!.imageLoaded + 1;
        }
    }
})

该方案改动最小,但后续逻辑变更时容易忽略此处的断言埋下隐患,不推荐长期使用。

方法3:可选链+空值合并兜底

如果需要兼容异常场景,也可以用可选链加空值合并运算符给默认值兜底:

const updateLoadedCount = mutatorAction('updateLoadedCount', (cid: string) => {
    const telemetryData = getTelemetryStore()?.telemetryData;
    if (telemetryData?.has(cid)) {
        const target = telemetryData.get(cid);
        target && (target.imageLoaded = (target.imageLoaded ?? 0) + 1);
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:06:08