已开机,快来 Type-Challenges【 easy-11-tuple-to-object】

215 阅读1分钟

元组转对象

传入一个元组类型,将这个元组类型转换为对象类型。

例如

const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const
​
type result = TupleToObject<typeof tuple> // expected { tesla: 'tesla', 'model 3': 'model 3', 'model X': 'model X', 'model Y': 'model Y'}

要点

  • T[number]所有元组类型组成的联合类型

解答

type TupleToObject<T extends readonly (string|number)[]> = {
  [P in T[number]]: P
}

测试

type Expect<T extends true> = T;
type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
​
const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as consttype cases = [
  Expect<Equal<TupleToObject<typeof tuple>, { tesla: 'tesla'; 'model 3': 'model 3'; 'model X': 'model X'; 'model Y': 'model Y'}>>,
]
​
// @ts-expect-error
type error = TupleToObject<[[1, 2], {}]>

更多解答

分享你的解答 查看解答