parent
1709554e37
commit
7bb961c548
@ -0,0 +1,41 @@
|
||||
import type { Equal, Expect } from '@type-challenges/utils'
|
||||
|
||||
type cases = [
|
||||
Expect<Equal<Fill<[], 0>, []>>,
|
||||
Expect<Equal<Fill<[], 0, 0, 3>, []>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], 0, 0, 0>, [1, 2, 3]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], 0, 2, 2>, [1, 2, 3]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], 0>, [0, 0, 0]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true>, [true, true, true]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true, 0, 1>, [true, 2, 3]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true, 1, 3>, [1, true, true]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true, 10, 0>, [1, 2, 3]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true, 10, 20>, [1, 2, 3]>>,
|
||||
Expect<Equal<Fill<[1, 2, 3], true, 0, 10>, [true, true, true]>>,
|
||||
]
|
||||
|
||||
type FillInternal<
|
||||
T extends unknown[],
|
||||
N,
|
||||
Start extends number = 0,
|
||||
End extends number = T['length'],
|
||||
Left extends unknown[] = [],
|
||||
Mid extends unknown[] = [],
|
||||
Right extends unknown[] = T,
|
||||
> =
|
||||
Right extends [infer Head, ...infer Tail]
|
||||
? Left['length'] extends Start
|
||||
? Mid['length'] extends End
|
||||
? [...Mid, Head, ...Tail]
|
||||
: FillInternal<T, N, Start, End, Left, [...Mid, N], Tail>
|
||||
: FillInternal<T, N, Start, End, [...Left, Head], [...Left, Head], Tail>
|
||||
: [...Mid, ...Right]
|
||||
;
|
||||
|
||||
type Fill<
|
||||
T extends unknown[],
|
||||
N,
|
||||
Start extends number = 0,
|
||||
End extends number = T['length'],
|
||||
> = FillInternal<T, N, Start, End>
|
||||
;
|
||||
Loading…
Reference in new issue