元组转对象
元组字面量转键值相同的对象
用例
type Tuple = ["a",1,"3"];
type Res = TupleToObject<T>
//预期: {a:"a", 1:1, 3:"3"}
实现
type TupleToObject<T extends readonly(string|number|symbol)[]> = {[P in T[number]]:P}
知识点
1 泛型约束
<T extends readonly (string|number|symbol)[]>
T extends readonly []: 限制传入的 泛型 T 必须是一个只读数组,且数组的每一项必须是 string、number、symbol 中的一种。因为后面要把这些值作为对象的 key,而 JS 对象的键只能是这 3 种类型,效果是:
- 传入 ['a', 'b'] 可以通过;传入 [true, 1] 会报错(因为 boolean 不能做 key)
2 索引访问
T[number]
T[number]: 用 number 作为索引去读取数组 T,获取数组所有元素的联合类型.效果是:
- 如果 T = ['a', 'b', 1],那么 T[number] 的结果就是 'a' | 'b'| 1(字面量联合)
3 映射类型
{ [P in T[number]]: P }
使用 in 关键字遍历上一步T[number]得到的联合类型中的每一个成员。效果是:
- P 会依次取到 'a' , 'b',1
4 赋值(Key 与 Value 相同)
: P : 将当前遍历到的值 P,同时作为键(Key)和值(Value)返回。效果是:
- 最终生成一个新对象类型

浙公网安备 33010602011771号