[Typescript] 68. Medium - Fill
Fill, a common JavaScript function, now let us implement it with types. Fill<T, N, Start?, End?>, as you can see,Fill accepts four types of parameters, of which T and N are required parameters, and Start and End are optional parameters. The requirements for these parameters are: T must be a tuple, N can be any type of value, Start and End must be integers greater than or equal to 0.
type exp = Fill<[1, 2, 3], 0> // expected to be [0, 0, 0]
type PlusOne<T extends number, C extends unknown[] = []> = C['length'] extends T
? [...C, unknown]['length']
: PlusOne<T, [...C, unknown]>
type Fill<
T extends unknown[],
N,
Start extends number = 0,
End extends number = T['length'],
P extends number = 0 // set a pointer, init with 0
> = Start extends End // Stop when Start = End
? T
: T extends [infer F, ...infer RT]
? P extends Start
? [N, ...Fill<RT, N, PlusOne<Start>, End, PlusOne<P>>] // Replace the value when Pointer = Start, increasing value by 1
: [F, ...Fill<RT, N, Start, End, PlusOne<P>>] // No need to replace F, increase P
: [];

浙公网安备 33010602011771号