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

如何在可空嵌套类型场景下使用TypeScript索引访问类型

问题原因

Result['data'] 是包含 null 的联合类型,TypeScript 不允许直接访问联合类型中不是所有成员都共有的属性,所以访问 nestedData 会触发类型报错。

解决方案

使用 TypeScript 内置的 NonNullable 工具类型先过滤掉 null 类型即可,完全不需要重复定义 Result 的任何结构:

type Result = { data: { nestedData: { foo: string; bar: string } } | null };

// 先剔除data类型中的null,再访问nestedData属性
type NestedData = NonNullable<Result['data']>['nestedData'];

NonNullable<T> 是 TypeScript 全局提供的通用工具类型,作用是从类型T中自动排除 null 和 undefined 类型,非常适配自动生成类型的场景。

如果遇到多层嵌套的可空属性场景,还可以封装通用的深度非空工具类型复用逻辑:

// 通用深度非空工具类型
type DeepNonNullable<T> = T extends object ? {
  [K in keyof T]: DeepNonNullable<NonNullable<T[K]>>
} : NonNullable<T>;

// 多层可空场景下也可以直接提取
type NestedData = DeepNonNullable<Result>['data']['nestedData'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:00:03