【类型挑战】Push,难度⭐️
2023-02-18 16:41:25 时间
Dear,大家好,我是“前端小鑫同学”,?长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 条件类型的灵活运用;
- 分布式条件类型的灵活运用;题目分析: 题目地址:3057-easy-push
题目解答: 测试用例:
/* _____________ 测试用例 _____________ */
import { Equal, Expect, ExpectFalse, NotEqual } from '@type-challenges/utils'
type cases = [
Expect<Equal<Push<[], 1>, [1]>>,
Expect<Equal<Push<[1, 2], '3'>, [1, 2, '3']>>,
Expect<Equal<Push<['1', 2, '3'], boolean>, ['1', 2, '3', boolean]>>,
]
复制代码
答案及解析:
第一次尝试解答:
- 我们同样做一下传入类型的约束,通过常用手法泛型类型来做;
- 如何将用例中的数组+数组和数组+元素合并?我们可以采用结构后合并到一个数组中;
- 那么我们就可以通过条件类型来判断是否为数组来进行不同的解构做拼接得到了下面的答案;
/* _____________ 答案,未能全部通过测试用例 _____________ */
type Push<T extends any[], U> = U extends any[] ? [...T, ...U] : [...T, U];
复制代码
第二次尝试解答:
- 第一次尝试的答案未能通过第三条测试用例;
- 我们通过typeA1 = Push<['1', 2, '3'], boolean>;发现输出类型编程了联合类型,而非我们需要的Boolean类型,那么我们就想到了分布式条件类型的默认行为;
- 如何处理分布式条件默认行为呢?官方文档给出了答案,我们可以使用中括号给extends两侧的类型进行包裹来避免这种默认行为,得到下面可以全部通过的答案;
/* _____________ 答案,可有全部通过测试用例 _____________ */
type Push<T extends any[], U> = [U] extends [any[]] ? [...T, ...U] : [...T, U];
复制代码
第三次尝试解答:
- 在这里我们还可以再次使用条件类型来判断U的类型是否为Boolean来直接返回boolean或返回U得到下面的答案;
/* _____________ 答案,可有全部通过测试用例 _____________ */
type Push<T extends any[], U> = U extends any[] ? [...T, ...U] : [...T, U extends boolean ? boolean : U];
复制代码
接下来的一题是:【类型挑战】Unshift,难度⭐️
相关文章
- 力扣算法经典第一题——两数之和(Java两种方式实现)
- Java中使用DOM4J来生成xml文件和解析xml文件
- Java调用腾讯云短信接口,完成验证码的发送(不成功你来砍我!!)
- Java反序列化漏洞学习
- Java核心知识体系3:异常机制详解
- Java核心知识体系2:注解机制详解
- Java核心知识1:泛型机制详解
- Java:导出Excel大批量数据的优化过程
- Springboot返回数据null转空字符串
- java记录项目的UV值与PV值
- 小米手机自拍图标-小米Civi 1S体验:这次,男生也能自拍美颜了
- java文件网络路径转MultipartFile
- 百度短信接口以及人脸实名认证接口
- 怎样使用摄像机-索尼高清摄像机使用方法简要介绍【教程】
- 小米手机自拍图标-小米Civi 1S vs 小米9:最强自拍手机的后置镜头咋样?
- spring框架
- hexo博客插入音视频
- java实用小功能案例
- Excel自动化办公
- Open-CV图像处理