假设我有以下对象:
const kids = {
Karen: ['Ava', 'Emma'],
Mary: ['Sophia'],
} as const;
通过使用constAssert,我可以提取文字类型:
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
但是如何提取Mother
(Karen,玛丽)和Kid
(Alice,Amelia,Sarah,Grace)的文字呢?
1条答案
按热度按时间gab6jxml1#
如果你真的只想提取每个字面值,你可以这样做:
对于
Mother
,我们只需提取grandkids
的每个属性的键对于
Kid
,我们提取每个祖母内部的每个母亲的数组,并使用[number]
将所有数组展平这个条件
是重要的,因为此时M可以是'Karen'或'Mary'的键,所以typescript不允许我们使用
M
来索引grandkids[K]
,因为它不能确定M
是grandkids[K]
的键。希望这个能帮上忙