为何TypeScript表达式const s: string = ['a'][1];合法?求值逻辑解析
表达式
const s: string = ['a'][1];的求值过程及类型分析 你误解了这行代码的结构——它不是把数组直接赋值给s,而是先创建数组、再执行索引访问,最终把索引访问的结果赋值给变量。具体拆解如下:
第一步:创建数组字面量
['a']
这是一个仅包含字符串'a'的数组,TypeScript会自动推断其类型为string[](字符串数组)。第二步:执行索引访问操作
[1]
数组的索引从0开始计数,索引0对应元素'a',但索引1超出了当前数组的实际长度(数组只有1个元素),因此这个索引访问的结果是undefined。
在TypeScript的类型系统中,访问数组的任意数字索引时,返回的类型是数组元素类型 | undefined——因为超出数组已知长度的索引位置可能不存在有效元素。第三步:赋值给变量
s
如果你没有开启TypeScript的strictNullChecks(严格空检查)编译选项,undefined会被允许隐式赋值给string类型,所以编译器不会抛出错误;一旦开启该选项,编译器就会报错,提示undefined不能赋值给string类型。
你之前的误区在于误以为是把整个数组赋值给s,但实际上['a'][1]是一个完整的表达式,运算优先级是先创建数组,再执行索引访问,最终赋值的是索引访问的结果,而非数组本身。
内容的提问来源于stack exchange,提问作者WowBow
相关产品推荐
相关产品推荐

