需求:实现类型版本的 Array.unshift
。
type Unshift<T extends any[], U> = any
import type { Equal, Expect } from '@type-challenges/utils'
import { ExpectFalse, NotEqual } from '@type-challenges/utils'
type cases = [
Expect<Equal<Unshift<[], 1>, [1]>>,
Expect<Equal<Unshift<[1, 2], 0>, [0, 1, 2 ]>>,
Expect<Equal<Unshift<['1', 2, '3'], boolean>, [boolean, '1', 2, '3']>>,
]
先用js的思路写一遍:
- 返回一个数组
- unshift新元素是在第一位,所以将U放在解构赋值数组的前面
function unshiftNum(T,U){
return [U,...T]
}
再想想ts怎么写:
- 返回一个数组 √
- unshift新元素是在第一位,所以将U放在解构赋值数组的前面 √
type Unshift<T extends any[], U> = [U,...T]