TypeScript提取深层对象属性类型时出现索引类型错误
TypeScript深层嵌套属性类型提取报错问题
我尝试提取对象obj深层嵌套结构中prop属性的类型(实际代码中该属性可为任意值),但TypeScript抛出了无法索引目标对象的异常。
报错的代码示例
const obj = { prop1: { prop1_1: { prop: '123' } }, prop2: { prop2_1: { prop: '123' } } }; type Obj = typeof obj; type Prop< Lvl1Key extends keyof Obj, Lvl2Key extends keyof Obj[Lvl1Key] > = Obj[Lvl1Key][Lvl2Key]['prop'];
触发的错误信息
Type '"prop"' cannot be used to index type '{ prop1: { prop1_1: { prop: string; }; }; prop2: { prop2_1: { prop: string; }; }; }[Lvl1Key][Lvl2Key]'
无错误的写法
如果移除Prop类型声明中的['prop'],在变量上索引prop属性则不会报错:
type Obj = typeof obj; type Prop< Lvl1Key extends keyof Obj, Lvl2Key extends keyof Obj[Lvl1Key] > = Obj[Lvl1Key][Lvl2Key]; // 类型为string,无错误 let abc: Prop<'prop1', 'prop1_1'>['prop'];
补充说明1:单层嵌套无报错
当嵌套层级更简单时,代码不会触发错误:
const obj = { prop1: { prop: '123' }, prop2: { prop: '123' } }; type Obj = typeof obj; type Prop< Lvl1Key extends keyof Obj, > = Obj[Lvl1Key]['prop']; // 类型为string,无错误 let abc: Prop<'prop1'>;
内容的提问来源于stack exchange,提问作者Aliser
相关产品推荐
相关产品推荐

