问题 #
实现一个通用First<T>
,它接受一个数组T
并返回它的第一个元素的类型。
例如:
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type head1 = First<arr1> // expected to be 'a'
type head2 = First<arr2> // expected to be 3
解答 #
type First<T extends any[]> = T extends [infer F, ...any] ? F : never
拆分 #
T extends any[]
限制了T
必须是数组T extends []
限制之后使用infer F
待推断的范围,使用infer F
来给第一个元素占位- 可能第一个元素
F
不存在,所以需要使用never
来指定类型