const obj = [
{
key: 'fruit',
value: ['apple', 'banana']
},
{
key: 'meat',
value: ['pork', 'chicken']
}
] as const;
我想生成类型
type T = {
'fruit': 'apple' | 'banana',
'meat': 'pork' | 'chicken'
}
我搜索过,但找不到如何使用值作为键。 如何从对象生成类型?
是的,您可以使用带有键重映射的映射类型来迭代obj
数组的元素类型对应的union
的成员,并将
"key"
属性映射到键和元素类型
"value"
属性的值:
type Tee = { [O in typeof obj[number] as O["key"]]: O["value"][number] }
/* type Tee = {
fruit: "apple" | "banana";
meat: "pork" | "chicken";
} */
请注意,您需要 typeof
类型运算符
来获取
obj
值的类型,并且需要 索引访问类型来获取特定类型键处的值的类型。因此,如果
O
是具有 key
和 value
属性的对象,则 O["key"]
是 key
属性的类型,而 O["value"]
是 value
属性的类型。对于数组,使用 number
(例如 (typeof obj)[number]
或 (O["value"])[number]
)索引可以提供元素类型(或者它们的并集,如果它是异构数组)。Playground 代码链接