Skip to content

第一个元素

302字约1分钟

2022-12-01

题目

Github: First of array

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

type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]

type head1 = First<arr1> // 应推导出 'a'
type head2 = First<arr2> // 应推导出 3

解题思路

获取数组的第一个元素类型,首先想到通过 索引类型,通过 T[0] 获取类型, 但是这里会有一个临界情况,如果传入的是一个空数组,会导致 T[0] 不能正常工作,因为它没有元素。

所以在获取数组的第一个元素类型前,需要检查数组是否为空。 可以通过 条件类型 推断数组是否为空,如果为空,则什么都不返回。

答案

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

验证

type 
cases
= [
Expect
<
Equal
<
First
<[]>, never>>,
Expect
<
Equal
<
First
<['a', 'b', 'c']>, 'a'>>,
Expect
<
Equal
<
First
<[3, 2, 1]>, 3>>
]

参考