You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:05:22