Skip to content

排除最后一项

273字小于1分钟

2022-12-01

题目

Github: Pop

实现一个通用Pop<T>,它接受一个数组 T,并返回一个由数组T的前 N-1 项以相同的顺序组成的数组。

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]

解题思路

我们需要将数组分成两部份:从头部到最后一个元素之前的所有内容和最后一个元素本身。 然后去掉最后一个元素并返回头部部分。

答案

type Pop<T extends any[]> = T extends [...infer R, unknown] ? R : T

验证

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

参考