TypeScript访问未定义数组索引为何无警告且可正常构建?
数组访问未定义索引的警告配置
默认情况下,TypeScript不会对数组访问未定义索引的行为抛出错误或警告。这是因为TypeScript的设计兼容JavaScript的原生行为——在JS中访问数组不存在的索引只会返回
undefined,不会抛出异常,TS默认沿用了这个逻辑,并且默认将数组索引访问的结果类型推断为数组的元素类型(而非元素类型 | undefined)。如果想要针对这类访问行为获得警告,可以启用TypeScript的
noUncheckedIndexedAccess编译选项:- 在
tsconfig.json中添加对应配置:{ "compilerOptions": { "noUncheckedIndexedAccess": true } } - 启用该选项后,数组索引访问的结果类型会被推断为
元素类型 | undefined。此时如果直接使用该值而未处理undefined的情况,TypeScript就会抛出类型错误,以此提醒你可能访问了不存在的索引。
- 在
举个实际代码示例:
const arr: number[] = []; const num = arr[0]; // 启用选项前:num类型为number,无任何警告 // 启用选项后:num类型为number | undefined,若直接调用num的方法(比如num.toFixed(2))会触发类型错误
内容的提问来源于stack exchange,提问作者Linh Phan
相关产品推荐
相关产品推荐

