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

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

知识运用:


  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;
}
复制代码


在演练场验证答案



相关文章
|
7月前
|
C语言 C++ 容器
【编码艺术:掌握String类函数接口的妙用指南】(一)
【编码艺术:掌握String类函数接口的妙用指南】
|
7月前
|
编译器 C++
【编码艺术:掌握String类函数接口的妙用指南】(三)
【编码艺术:掌握String类函数接口的妙用指南】
|
7月前
|
存储 Linux C语言
【编码艺术:掌握String类函数接口的妙用指南】(二)
【编码艺术:掌握String类函数接口的妙用指南】
|
4月前
|
开发者 Python
Python函数参数的魔法:揭秘如何用它们施展代码的无限可能!
【8月更文挑战第22天】Python函数参数展现了语言的强大与灵活。本文涵盖位置参数、默认参数、可变参数(*args)、关键字参数(**kwargs)及参数解包等,通过实例展示如何利用这些特性增强函数复用性与扩展性。类型注解的加入进一步提升了代码的可读性和健壮性。掌握这些技巧能帮助开发者写出更高效优雅的Python代码。
59 0
|
7月前
|
存储 传感器 机器学习/深度学习
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
132 0
|
7月前
|
存储 Java 程序员
Java数组全套深入探究——基础知识阶段2、数组的定义语法
Java数组全套深入探究——基础知识阶段2、数组的定义语法
68 0
|
7月前
|
存储 Linux C++
【编码艺术:掌握String类函数接口的妙用指南】(四)
【编码艺术:掌握String类函数接口的妙用指南】
|
7月前
|
NoSQL 安全 API
【Redi设计与实现】第二章:简单动态字符串
【Redi设计与实现】第二章:简单动态字符串
|
安全 Go
Go语言字典无限进化,实现可存任意类型值!
Go语言字典无限进化,实现可存任意类型值!
72 0
|
机器学习/深度学习 搜索推荐 算法
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
71 0