type IsZero<T extends number> = T extends 0 ? never : T
ついでに上の足し算を数字だけ返しますよ!っていう明示的なものにするやつを作って・・・(語彙力)
type Add<T extends number, U extends number> = AddProto<T, U> extends number ? AddProto<T, U> : never;
二次元配列を一次元配列にするやつも作って・・・
type SecArrayToFirstArray< T extends any[][], N extends number = 0, Result extends any[] = []> = N extends T["length"] ? Result : SecArrayToFirstArray<T, Add<N, 1>, [...Result, ...T[N]]>;
これで掛け算実装ですね!
type KakezanProto< T extends number, U extends number, C extends any[][] = []> = IsZero<T | U> extends never ? [] : C["length"] extends U ? SecArrayToFirstArray<C> : KakezanProto<T, U, [...C, Generate<T>]>;type Kakezan<T extends number, U extends number> = KakezanProto<T, U> extends never[] ? KakezanProto<T, U>["length"] : 0