题目描述
Implement the type version of Array.shift
For example
type Result = Shift<[3, 2, 1]> // [2, 1]
题解
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
type cases = [
// @ts-expect-error
Shift<unknown>,
Expect<Equal<Shift<[]>, []>>,
Expect<Equal<Shift<[1]>, []>>,
Expect<Equal<Shift<[3, 2, 1]>, [2, 1]>>,
Expect<Equal<Shift<['a', 'b', 'c', 'd']>, ['b', 'c', 'd']>>,
]
// ============= Your Code Here =============
type Shift<
T extends unknown[]
> =
T extends [unknown, ...infer Tail]
? Tail
: []
-
条件类型:
-
T extends [unknown, ...infer Tail] ? Tail : []:-
如果
T是非空数组:-
使用
unknown表示第一个元素,将剩余部分推导为Tail -
返回
Tail
-
-
如果
T是空数组:- 返回
[]
- 返回
-
-