如何将TypeScript字符串联合类型的取值映射为对象类型的键
解法
你可以直接用TypeScript内置的Record工具类实现,一行代码就能搞定:
// 原始联合类型 type Fruit = 'apple' | 'banana' | 'pear' // 生成目标对象类型 type FruitObject = Record<Fruit, string>
这个FruitObject和你手动写的效果完全一致,所有键都是Fruit的联合成员,值类型都是string。
如果你想自己实现底层逻辑,也可以写自定义映射类型,用in关键字遍历联合类型的所有成员作为键:
type FruitObject = { [Key in Fruit]: string }
如果需要复用这个逻辑处理不同的联合类型和值类型,可以封装通用工具类型:
// 通用工具类型,第一个参数是键的联合类型,第二个参数是值的类型 type UnionToObj<Key extends string | number | symbol, Value> = { [K in Key]: Value } // 使用示例 type FruitObject = UnionToObj<Fruit, string> type NumberKeyObj = UnionToObj<1 | 2 | 3, boolean>
内容的提问来源于stack exchange,提问作者davidlav
相关产品推荐
相关产品推荐

