← 中文资源

简体中文版本

TypeScript 严格模式下报 TS18048: 值可能为 undefined

通过组织代码使可选值在使用前被收窄,处理 TS18048,避免非空断言。

阅读英文原文

症状

在严格模式下,编译器对一个已知可能为 undefined 的值报 TS18048。该值通常来自数组索引、map 的 get 或可选属性,随后未加守卫就被使用。TS18048 与 TS2532 相关;两者都要求你在代码依赖它之前决定值缺失时该怎么办。

诊断

在值产生处立即收窄;用空值合并提供默认;搜索其来源是索引、get 还是可选字段。

const x = arr[i]; if (x === undefined) return; use(x)

根因

一个类型上可能为 undefined 的值被当作已定义使用。严格模式要求先用分支或默认值确定其存在。

修复

产出该值处收窄:不可接受缺失时提前返回,缺失对应回退时用空值默认,或收紧函数签名使需要确定值的调用方不会拿到 undefined。避免断言运算符,它把失败推迟到运行时。

验证

重新运行类型检查确认错误清除,并新增覆盖缺失路径的测试。存在与缺失两种情况都符合设计才算验证通过。

常见陷阱

用非空断言强行使用会在缺失时运行时崩溃;应显式设计缺失时的行为。