【类型挑战】元组转换为对象,难度⭐️

简介: 【类型挑战】元组转换为对象,难度⭐️

知识运用:


  1. 认识什么是as const,有什么作用;
  2. 如何得到数组类型中的元素类型
  3. Typeof 类型运算符的到被引用变量或属性的类型;


题目分析:


题目地址:11-easy-tuple-to-objectimage.png如上图所示我们需要设计的类型工具需要满足将一个数组转为由其元素组成的key和value看着相同的对象类型。


题目解答:


测试用例:

测试用例还是挺简单的比较经过我们设计的类型工具处理后的结果后定义的内容是否一致,但当我们的元祖中元素存在对象类型时会抛出错误。

/* _____________ 测试用例 _____________ */
// 完整测试用例可见 type-challenges项目,点击题目链接可转到
import { Equal, Expect } from '@type-challenges/utils'
const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const
type 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], {}]>
复制代码


答案及解析:

  1. 通过typeof tuple处理后我们得到了由只读的tuple内容组成的一份类型数组,在这里我们需要通过T[number]来得到元素的类型。
  2. 同样通过in来映射匹配数组每一条元素,当然了value也是这里的key,是相同的。
  3. 当然作为对象的key是不可以使用对象,数组这些类型的,所以我们的T需要约束为string[]类型来满足条件。
/* _____________ 答案 _____________ */
type TupleToObject<T extends readonly string[]> = {
  [key in T[number]]: key;
}
复制代码


在演练场验证答案



相关文章
|
开发框架 .NET C#
c#数组补充
c#数组的几个简单的补充
42 0
|
5月前
|
存储 安全 索引
探究Python中的元组:不可变性与多重用途
探究Python中的元组:不可变性与多重用途
|
安全 Go
Go语言字典无限进化,实现可存任意类型值!
Go语言字典无限进化,实现可存任意类型值!
67 0
|
存储 NoSQL API
【Redi设计与实现】第六章:整数集合
【Redi设计与实现】第六章:整数集合
【Redi设计与实现】第六章:整数集合
|
前端开发
前端学习案例16-隐式类型转换-16 原
前端学习案例16-隐式类型转换-16 原
76 0
前端学习案例16-隐式类型转换-16 原
|
前端开发
前端学习案例4-隐式类型转换-4 原
前端学习案例4-隐式类型转换-4 原
57 0
前端学习案例4-隐式类型转换-4 原
|
前端开发
前端学习案例15-隐式类型转换-15 原
前端学习案例15-隐式类型转换-15 原
62 0
前端学习案例15-隐式类型转换-15 原
|
测试技术 索引
【类型挑战】获取元祖长度,难度⭐️
【类型挑战】获取元祖长度,难度⭐️
207 0
【类型挑战】获取元祖长度,难度⭐️
|
测试技术
【类型挑战】获取函数返回类型,难度⭐️⭐️
【类型挑战】获取函数返回类型,难度⭐️⭐️
143 0
【类型挑战】获取函数返回类型,难度⭐️⭐️
|
JavaScript 测试技术 索引
【类型挑战】第一个元素,难度⭐️
【类型挑战】第一个元素,难度⭐️
118 0
【类型挑战】第一个元素,难度⭐️