如何让TypeScript编译器识别字符串索引对象取值可能为undefined
解决方案
开启 TypeScript 编译配置中的 noUncheckedIndexedAccess 选项即可实现你需要的效果。
具体操作
- 打开项目根目录的
tsconfig.json文件 - 在
compilerOptions配置项中添加如下配置:
{ "compilerOptions": { "noUncheckedIndexedAccess": true } }
- 开启后,所有通过索引(字符串索引、数字索引)访问对象属性的返回值类型都会自动加上
undefined,你的示例代码就会触发预期的编译错误:
const keyValueMap: {[key: string]: string} = {}; keyValueMap["foo"]="bar"; // 此处会抛出类型错误:不能将类型“string | undefined”分配给类型“string” const valueOrUndefined: string = keyValueMap["someKey"];
注意事项
- 该配置会全局生效,所有数组通过下标访问的返回值也会自动带上
undefined,如果确认对应下标一定存在,可以使用非空断言操作符!规避报错,示例:arr[0]! - 开启该配置不会影响你提到的联合类型索引的校验逻辑,原有校验规则可以正常运行
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

