如何使用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
相关产品推荐
相关产品推荐

