题目描述

实现一个通用First<T>,它接受一个数组T并返回它的第一个元素的类型。

例如:

  1. type arr1 = ['a', 'b', 'c']
  2. type arr2 = [3, 2, 1]
  3. type head1 = First<arr1> // expected to be 'a'
  4. type head2 = First<arr2> // expected to be 3

题目解答

要想获取数组T第一个元素的类型,可以这么写:

  1. type First<T> = T[0];

这时就报错了:
image.png
我们需要使用extends来约束T是一个数组:

  1. type First<T extends any[]> = T[0];

还要处理边界情况,如果数组为空,那T[0]是不能正常工作的。所以,当数组为空时就返回never类型,否则就返回T[0]。最终的实现如下:

  1. type First<T extends any[]> = T extends [] ? never : T[0];

image.png