全部文章
工具笔记

让 AI 找出 TypeScript 字典里缺失键的真实行为

用 noUncheckedIndexedAccess 暴露缺失键。

资料核验2026.11.12 · TypeScript · 建议开启 strict 模式

通过语言代码查翻译,测试数据只有中文和英文,实际请求传进来一个没配置的值。对象的索引签名写着字符串,运行时却可能拿到 undefined。

交给编码助手的任务

请助手选一个翻译字典和一个权限字典,开启 noUncheckedIndexedAccess 做一次小范围评估。要求它解释缺失时分别应显示缺省文字还是拒绝授权,再逐项修复具体读取点。

流程示意:读取字典;遇到不存在的键;采用业务回退

把缺失交给调用方决定

在开启严格空值检查的项目里试用 noUncheckedIndexedAccess。对没有明确声明的索引访问,类型可能包含 undefined。读取翻译时,用明确的缺省语言或展示缺失提示。读取权限记录时,则应按没有授权处理。

从一个小模块评估升级影响。区分真实缺失和已通过逻辑保证的索引,别把所有新报错统一改成非空断言。

验收中加上不存在的键。类型提醒的价值,是逼实现把产品行为说清楚。

先准备一个对照样例

用 zh-CN 和 not-configured 对照翻译,用已配置与不存在的角色键对照权限。让助手将四个期望先写进测试,再收紧索引访问。默认语言存在与否也应是可验证前提。

用这些结果验收

  • 正常语言能命中。
  • 未知语言回退到约定语言。
  • 未知权限键不会返回允许。避免给每个新增告警一律加非空断言。

审查时容易漏掉什么

将访问点划分为有逻辑证明和可能缺失两种。真的有证明时用清晰分支表达。翻译可以容错,权限应拒绝,不能给两者抽一个默认返回真值的工具函数。

严格选项可能影响整个项目。可以先对单个包的 tsconfig 开启,再看首批报错集中在哪些类型入口。若一段程序先验证键再读取,直接表达这种关系。把缺失检查散布在所有调用方,容易让业务的回退规则不一致。

资料来源