索引签名为何可能掩盖缺失值,严格项目应如何设计动态键访问
简答题中等990 次浏览
参考答案与解析
# 核心结论
索引签名描述的是动态属性的值类型,并不能证明每一个可能的运行时键都真实存在。Record<string, User> 从类型写法上接受字符串键,但实际对象仍可能为空;在未开启 noUncheckedIndexedAccess 时,动态读取可能被视为 User,从而掩盖缺失值。开启该选项后,无法由类型系统证明存在的索引结果会加入 undefined。严格项目应根据键集合是封闭、可选还是完全动态,分别选择精确的键联合、可选映射或显式包含缺失状态的字典。
# 底层机制
明确声明的属性和开放索引具有不同的存在性信息。对于必填属性 config.port,编译器知道其应当存在;对于 `users
