export type NumberToArray< Number extends number, Carry extends readonly any[] = [] > = Number extends Carry["length"] ? Carry : NumberToArray; export type NumbersToArray< Numbers extends readonly number[], Carry extends readonly any[] = [] > = Numbers extends [ infer Head extends number, ...infer Tail extends readonly number[] ] ? NumbersToArray]> : Carry; export type AddNumbers = NumbersToArray extends infer T extends readonly any[] ? T["length"] : never; export type MultiplyInner< N extends number, MS extends readonly any[], Carry extends number = 0 > = MS extends [infer Head extends number, ...infer Tail extends readonly any[]] ? MultiplyInner> : Carry; export type Multiply = MultiplyInner< M, NumberToArray >;