检索词
拥有属性
具有OwnProperty
无未选中的索引访问
类型检查
建议
noUncheckedIndexedAccess
是一个很棒的特性,但是ts报告即使使用hasOwnProperty
检查,对象也可能是undefined
。
我建议hasOwnProperty
检查将未检查的索引访问变为已检查,并返回已检查的值。
用例
const obj: {[key: string]: string} = {};
// do something with obj
const key = "someKey";
if (Object.prototype.hasOwnProperty.call(obj, key)) {
console.log(obj[key].length); // TS2532: Object is possibly 'undefined'.
}
由于obj
中只允许string
值,因此只有当obj
上不存在该键时,才会出现undefined
的值。obj[key]
的值只能是string
。但是,typescript仍会报告obj[key]
的类型为string | undefined
。
示例
const obj: {[key: string]: string} = {};
// do something with obj
const key = "someKey";
if (Object.prototype.hasOwnProperty.call(obj, key)) {
console.log(obj[key].length); // no problem, since obj[key] has correct type string
}
检查清单
我的建议符合以下准则:
- 这不会是对现有TypeScript/JavaScript代码的重大更改
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不基于表达式的类型发出不同JS的情况下实现
- 这不是运行时功能(例如,库功能、带有JavaScript输出的非ECMAScript语法等)
- 此功能与TypeScript's Design Goals的其余部分一致。
1条答案
按热度按时间ugmeyewa1#
相关:#10530