实现一个 Last<T>
泛型,它接受一个数组 T
并返回其最后一个元素的类型
例如:
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type tail1 = Last<arr1> // 应推导出 'c'
type tail2 = Last<arr2> // 应推导出 1
答案
// 答案 1 type Last<T extends readonly any[]> = T extends [...any[], infer R] ? R : never // 答案 2 type Last<T extends readonly any[]> = T['length'] extends 0 ? never : [any, ...T][T['length']] // 答案 3;递归 type Last<T extends readonly any[]> = T['length'] extends 0 ? never : T['length'] extends 1 ? T[0] : T extends [any, ...infer R] ? Last<R> : never // 答案 3 清晰但不够简洁 type Last<T extends readonly any[]> = T extends [any, ...infer R] ? T['length'] extends 1 ? T[0] : Last<R> : never