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

如何使用const断言从多层嵌套对象提取指定字面量类型?

从深层const断言对象提取字面量类型

先看基础示例:

const kids = {
  Karen: ['Ava', 'Emma'],
  Mary: ['Sophia'],
} as const;

通过const断言,可以提取其中的字面量类型:

type Mother = keyof typeof kids; // Karen|Mary
type Kid = typeof kids[Mother][number]; // Ava|Emma|Sophia

现在有一个层级更深的对象:

const grandkids = {
  Karen: {
    Ava: ['Alice', 'Amelia'],
    Emma: ['Sarah'],
  },
  Mary: {
    Sophia: ['Grace'],
  },
} as const;

已经提取出第一层的类型:

type Grandmother = keyof typeof grandkids; // Karen|Mary

提取中间层和最底层字面量类型

如果要提取中间层的类型(即Ava、Emma、Sophia,对应你问题里提到的「Mother」),可以通过访问Grandmother对应对象的键:

type Mother = keyof typeof grandkids[Grandmother]; // Ava|Emma|Sophia

提取最底层的孙辈类型(即Alice、Amelia、Sarah、Grace,对应你问题里的「Kid」),则需要再深入一层访问数组的元素类型:

type Kid = typeof grandkids[Grandmother][Mother][number]; // Alice|Amelia|Sarah|Grace

如果不想依赖已定义的Grandmother和Mother类型,也可以直接通过链式推导完成:

// 中间层类型
type Mother = keyof (typeof grandkids)[keyof typeof grandkids];
// 最底层孙辈类型
type Kid = (typeof grandkids)[keyof typeof grandkids][keyof (typeof grandkids)[keyof typeof grandkids]][number];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:27:12