如何在可空嵌套类型场景下使用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
相关产品推荐
相关产品推荐

