Pop
挑战
实现一个通用的 Pop<T>
,它接受一个数组 T
并返回一个没有最后一个元素的数组。
例如:
type arr1 = ["a", "b", "c", "d"];
type arr2 = [3, 2, 1];
type re1 = Pop<arr1>; // expected to be ['a', 'b', 'c']
type re2 = Pop<arr2>; // expected to be [3, 2]
解答
我们需要将数组分成两部份:从头部到最后一个元素之前的所有内容和最后一个元素本身。 之后,我们就可以去掉最后一个元素并返回头部部分了。
为此,我们可以使用 variadic tuple types。 结合 type inference in conditional types, 我们可以推断出需要的部分:
type Pop<T extends any[]> = T extends [...infer H, infer T] ? H : never;
如果 T
是可拆分为两部分的数组类型,则我们返回除最后一个以外的所有内容,否则返
回 never
。
评论