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

TypeScript使用方括号索引访问对象未报错,如何开启校验?

如何让TypeScript禁止用无效索引访问具名键对象

这确实是个容易被忽略的坑!你说得完全对,first[1]这种写法逻辑上肯定要报错,毕竟testObject里根本没有1(或者转换后的字符串"1")这个键。之所以当前没触发错误,是因为TypeScript默认的宽松行为——当你用方括号索引访问一个没定义索引签名的对象时,它会隐式把返回值推断为any类型,自然不会提示错误。

要解决这个问题,只需要开启对应的编译标志就行,这里有两种推荐方式:

  • 开启noImplicitAny:这个选项会禁止TypeScript隐式使用any类型。当你再写first[1]时,TypeScript会直接抛出错误,提示你无法用number类型的表达式去索引testObject类型,因为testObject上不存在1这个属性。
  • 直接开启strict: true:这是个“一键拉满”的严格检查集合,包含了noImplicitAny在内的多项严格规则,能帮你规避更多潜在的类型问题,当然也会覆盖这个场景。

你只需要在tsconfig.json里修改对应的配置即可:

{
  "compilerOptions": {
    // 二选一即可
    "noImplicitAny": true,
    // "strict": true
  }
}

另外补充个小知识点:如果你确实需要让对象支持某些额外的索引访问,可以给接口添加索引签名,比如:

interface testObject {
  name: string;
  id: number;
  [key: string]: string | number; // 允许任意字符串键,值为string或number类型
}

不过这种情况就属于主动放宽类型限制了,根据你的实际需求选择就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:11