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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:36