logoProsperBao

出堆

2022-03-28 09

题目来源(type-challenges)

问题

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

例如 实现一个通用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]
type re3 = Shift<arr1> // expected to be ['b', 'c', 'd']
type re4 = Shift<arr2> // expected to be [2, 1]
type re5 = Push<arr1, 'e'> // expected to be ['a', 'b', 'c', 'd', 'e']
type re6 = Push<arr2, 0> // expected to be [3, 2, 1, 0]
type re7 = Unshift<arr1, 'z'> // expected to be ['z', 'a', 'b', 'c', 'd'
type re8 = Unshift<arr2, 4> // expected to be [4, 3, 2, 1]

额外:同样,您也可以实现ShiftPushUnshift吗?

解答

type Pop<T extends unknown[]> = T extends [...infer rest, any] ? rest : never
type Shift<T extends unknown[]> = T extends [any, ...infer rest] ? rest : never
type Push<T extends unknown[], V> = [...T, V]
type Unshift<T extends unknown[], V> = [V, ...T]

拆分

  1. 最后一个元素 类似