为什么在 TypeScript 中,索引访问的数组元素在其类型中没有"undefined"?



我注意到在以下示例中,c的类型是number,而不是number|undefined:

const a:number[] = []
const c = a[1]

换句话说,我可以做

let b:number = a[1]

a[1]可以是undefined。这可能会导致代码中隐藏的错误。我是不是错过了什么?

在typescript(4.1(的下一个版本中,您将能够使用noUncheckedIndexedAccess(也称为迂腐索引签名检查(编译器选项启用所需的行为:

  • 读取位置中使用的任何索引访问表达式obj[index]的类型中都将包含undefined,除非index是字符串文字或以前进行过缩小的数字文字
  • 任何属性访问表达式obj.pop,如果不存在匹配的声明的名为prop的属性,但确实存在字符串索引签名,则在其类型中都将包括未定义的,除非之前对obj.rop的缩小有效

因此a[1]将导致number | undefined。你已经可以通过安装typescript@next来尝试了

公告

PR

相关内容

  • 没有找到相关文章

最新更新