实现一个 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