TypeScript 使用自己属性检查筛选noUncheckedIndexedAccess

ddrv8njm  于 2022-10-29  发布在  TypeScript
关注(0)|答案(1)|浏览(188)

检索词

拥有属性
具有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的其余部分一致。

相关问题