元组转对象

元组字面量转键值相同的对象

用例

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)返回。效果是:

  • 最终生成一个新对象类型
posted @ 2026-07-08 13:42  一个行走者  阅读(12)  评论(0)    收藏  举报