我注意到在以下示例中,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