【类型挑战】最后一个元素,难度⭐️⭐️

简介: 【类型挑战】最后一个元素,难度⭐️⭐️

知识运用:


  1. 条件类型的使用:文档地址
  2. infer关键字也参照条件类型使用的文档
  3. 在泛型中对类型做约束:文档地址
  4. 索引访问类型:文档地址


题目分析:


题目地址:15-medium-lastimage.png如上图所示,我们需要设计的通用类型工具需要满足重一个数组中取出最后一个元素来当我们的输出类型。本题和我们一开始取数组类型第一个元素一样。


题目解答:


测试用例:

需满足两个测试用例,分别将使用Last类型工具的到的类型和预期的对比。

/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
  Expect<Equal<Last<[3, 2, 1]>, 1>>,
  Expect<Equal<Last<[() => 123, { a: string }]>, { a: string }>>,
]
复制代码


答案及解析:

  1. 同样还是使用泛型约束我们的输入类型必须符合任意类型的数组。
  2. 在获取数组中最后一位的元素类型时我们还是使用数组解构的方式。
  3. 我们在使用数组解构的时候同样需要搭配条件类型来获取(按默认语法解构来记忆)。
type Last<T extends any[]> = T extends [...unknown[], infer L] ? L : never;
复制代码


去演练场验证答案



相关文章
|
7月前
|
存储 算法 搜索推荐
【专业精确】揭秘C语言中如何高效找出数组最大值的下标,新手必看!
【专业精确】揭秘C语言中如何高效找出数组最大值的下标,新手必看!
|
测试技术 索引
【类型挑战】实现 Omit,难度⭐️⭐️
【类型挑战】实现 Omit,难度⭐️⭐️
252 0
【类型挑战】实现 Omit,难度⭐️⭐️
|
JavaScript 前端开发 测试技术
【类型挑战】出栈,难度⭐️⭐️
【类型挑战】出栈,难度⭐️⭐️
149 0
【类型挑战】出栈,难度⭐️⭐️
|
JavaScript 测试技术 索引
【类型挑战】第一个元素,难度⭐️
【类型挑战】第一个元素,难度⭐️
122 0
【类型挑战】第一个元素,难度⭐️
|
测试技术 API
【类型挑战】元组转联合,难度⭐️⭐️
【类型挑战】元组转联合,难度⭐️⭐️
179 0
【类型挑战】元组转联合,难度⭐️⭐️
|
测试技术
【类型挑战】深度 Readonly,难度⭐️⭐️
【类型挑战】深度 Readonly,难度⭐️⭐️
318 0
【类型挑战】深度 Readonly,难度⭐️⭐️
|
测试技术
【类型挑战】获取函数返回类型,难度⭐️⭐️
【类型挑战】获取函数返回类型,难度⭐️⭐️
149 0
【类型挑战】获取函数返回类型,难度⭐️⭐️
|
测试技术 索引
【类型挑战】获取元祖长度,难度⭐️
【类型挑战】获取元祖长度,难度⭐️
213 0
【类型挑战】获取元祖长度,难度⭐️
|
测试技术
【类型挑战】Unshift,难度⭐️
【类型挑战】Unshift,难度⭐️
116 0
【类型挑战】Unshift,难度⭐️
|
测试技术
【类型挑战】Readonly 2,难度⭐️⭐️
【类型挑战】Readonly 2,难度⭐️⭐️
152 0
【类型挑战】Readonly 2,难度⭐️⭐️