如何在TypeScript中正确解引用嵌套可选字段?
TypeScript嵌套可选接口的类型解引用方案
你的报错原因很明确:Sample["key1"]的类型是Obj1[] | undefined,当你直接用[number]索引时,TypeScript会检查到undefined类型没有数字索引签名,因此抛出错误。以下是几种可行的解决方式:
1. 使用非空断言运算符(!)
如果你能确定key1、a、b这些字段一定存在,可以用!强制告诉TypeScript忽略undefined的可能性:
const a: Sample["key1"]![number]["a"]!["b"]! = "asd";
2. 用NonNullable工具类型分步处理
通过NonNullable<T>工具类型逐层去除undefined,让类型推导更清晰,也方便后续复用这些类型:
interface Sample { key1?: Array<Obj1> } interface Obj1 { a?: Obj2; } interface Obj2 { b?: string; } // 逐层移除undefined类型 type Key1NonNull = NonNullable<Sample["key1"]>; type Obj1FromKey1 = Key1NonNull[number]; type Obj2NonNull = NonNullable<Obj1FromKey1["a"]>; type BType = NonNullable<Obj2NonNull["b"]>; const a: BType = "asd";
3. 保留可选性的类型定义
如果字段可能不存在,想要类型保留string | undefined的可选性,可以用类型层面的可选链?.:
const a: Sample["key1"]?.[number]["a"]?.["b"] = "asd";
内容的提问来源于stack exchange,提问作者Rahul Yadav
相关产品推荐
相关产品推荐

