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

数组为空时TypeScript不执行类型检查,如何开启对应校验?

TypeScript 数组空值索引访问校验方案

TypeScript 默认不会对数组的索引访问做边界校验,当数组为空时,访问下标对应的属性不会触发编译报错,仅会在运行时抛出异常,你给出的代码符合该默认行为。

解决方案

方案1:全局开启索引访问校验配置

在tsconfig.json的compilerOptions中开启noUncheckedIndexedAccess配置项:

{
  "compilerOptions": {
    "noUncheckedIndexedAccess": true
  }
}

开启后效果:

  • 所有数组索引访问结果、对象索引签名属性的类型会自动联合undefined
  • 你的示例代码会直接触发编译报错:对象可能为 "undefined"
  • 必须通过类型收窄(如非空判断、可选链)才能访问属性:
    // 可选链写法,不会报错
    l[0]?.name
    
    // 非空判断收窄类型
    if (l[0]) {
      console.log(l[0].name)
    }
    

方案2:针对特定数组声明为非空数组类型

如果业务逻辑要求该数组必须至少存在一个元素,不需要全局开启配置,可以直接定义非空数组类型:

// 非空数组类型定义
type NonEmptyArray<T> = [T, ...T[]]

type List = NonEmptyArray<{ name: string }>
const l: List = [] // 编译直接报错:不能将类型“[]”分配给类型“NonEmptyArray<{ name: string; }>”

这种方案会在数组初始化赋值为空的时候就提前报错,从根源避免后续的索引越界问题。

注意事项

noUncheckedIndexedAccess属于严格校验规则,开启后会增加一定的类型编码成本,需要根据项目的严格程度按需开启。

内容的提问来源于stack exchange,提问作者Zcc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:02