diff --git a/fill.ts b/fill.ts new file mode 100644 index 0000000..4898744 --- /dev/null +++ b/fill.ts @@ -0,0 +1,41 @@ +import type { Equal, Expect } from '@type-challenges/utils' + +type cases = [ + Expect, []>>, + Expect, []>>, + Expect, [1, 2, 3]>>, + Expect, [1, 2, 3]>>, + Expect, [0, 0, 0]>>, + Expect, [true, true, true]>>, + Expect, [true, 2, 3]>>, + Expect, [1, true, true]>>, + Expect, [1, 2, 3]>>, + Expect, [1, 2, 3]>>, + Expect, [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 + : FillInternal + : [...Mid, ...Right] +; + +type Fill< + T extends unknown[], + N, + Start extends number = 0, + End extends number = T['length'], +> = FillInternal +; \ No newline at end of file