Chunk
问题描述
你知道吗lodash
?Chunk
是其中非常有用的函数,现在让我们来实现它。 Chunk<T, N>
接受两个必需的类型参数, 必须T
是tuple
, 必须N
是integer >=1
type exp1 = Chunk<[1, 2, 3], 2> // expected to be [[1, 2], [3]]
type exp2 = Chunk<[1, 2, 3], 4> // expected to be [[1, 2, 3]]
type exp3 = Chunk<[1, 2, 3], 1> // expected to be [[1], [2], [3]]
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
type cases = [
Expect<Equal<Chunk<[], 1>, []>>,
Expect<Equal<Chunk<[1, 2, 3], 1>, [[1], [2], [3]]>>,
Expect<Equal<Chunk<[1, 2, 3], 2>, [[1, 2], [3]]>>,
Expect<Equal<Chunk<[1, 2, 3, 4], 2>, [[1, 2], [3, 4]]>>,
Expect<Equal<Chunk<[1, 2, 3, 4], 5>, [[1, 2, 3, 4]]>>,
Expect<Equal<Chunk<[1, true, 2, false], 2>, [[1, true], [2, false]]>>,
]
// ============= Your Code Here =============
type Chunk<
T extends any[],
U extends number = 1,
S extends any[] = [],
V extends any[] = [],
> = T extends [infer F, ...infer R]
? S['length'] extends U
? Chunk<R, U, [F], [...V, S]>
: Chunk<R, U, [...S, F], V>
: S['length'] extends 0
? V
: [...V, S]
type Chunk<T extends any[], U extends number = 1, S extends any[] = []> = T extends [infer F,...infer R]
? S['length'] extends U
? [S, ...Chunk<T, U>]
: Chunk<R, U, [...S, F]>
: S['length'] extends 0
? S
: [S]
我宣布,我是个菜鸡。
看看大佬的带思路版的答案。