我"noUncheckedIndexedAccess": true
在我的tsconfig.json
. 切换的重点是在访问之前强制检查索引中的项目是否存在。
我很难用变量键检查对象:
假设我有以下结构:
const items: Record<string, {name: string}> = {
'123': {
name: 'asdf'
}
}
当我尝试使用文字键检查是否存在时,类型缩小工作正常:
if (items['123']) {
// OK: Compiles no problem
console.log(items['123'].name)
}
如果我尝试使用变量键检查是否存在,编译器就会开始抱怨。
const id = '123';
if (items[id]) {
// ERROR: items[id] - Object possibly undefined
console.log(items[id].name)
}
为什么不能以这种方式检查存在?
我甚至尝试了不同的检查:
if (id in items) {}
if (items.hasOwnProperty(id)) {}
if (typeof items[id] !== 'undefined') {}
那里没有运气。
唯一有效的是
const id = '123';
const item = items[id];
if (item) {
// OK
console.log(item.name)
}
不过我觉得有点太啰嗦了。
环境: TypeScript v4.5.4