为何将number类型值作为数组访问时TypeScript没有抛出编译错误
你遇到的这个情况是因为TS配置没有开启严格类型校验规则导致的。
具体原因
- 你提供的示例代码中,
test被显式声明为number类型,本身不支持下标索引访问,这类操作在严格校验模式下一定会触发TS类型报错。
const test : number = 123; const test2 = test[3]; // 严格模式下此处会抛出类型错误
- 你当前的tsconfig没有开启
strict总开关,也没有单独开启noImplicitAny规则,在这种宽松配置下,TS会允许对任意类型执行索引访问操作,返回值默认推断为any类型,不会抛出错误。
修复方案
只需要在tsconfig的compilerOptions中添加以下任意一项配置即可:
- 开启完整严格模式(推荐,可覆盖所有常见类型校验场景)
{ "compilerOptions": { // 保留你原有所有配置的基础上添加以下配置 "strict": true } }
- 仅单独开启禁止隐式any规则,仅针对这个问题修复
{ "compilerOptions": { // 保留你原有所有配置的基础上添加以下配置 "noImplicitAny": true } }
修改配置后重新执行TS校验,就会得到预期的错误提示:类型“number”上不存在索引签名,因此无法使用类型为“number”的参数进行索引。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

