この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - TypeScript タイプパズル
48. implement Divide<A, B>

以下は解答例です。

type Divide<A extends number, B extends number> = B extends 0 ? never : A extends 0 ? 0 : A extends infer X ? B extends infer Y ? X extends number ? Y extends number ? Math.floor<X/Y> : never : never : never : never;
  • AB の型変数にはそれぞれ number を制約として設定する。
  • 割る数 B が 0 の場合は計算できないため、never を返却する。
  • 割られる数 A が 0 の場合は必ず結果は 0 となるため、0 を返却する。
  • AB の両方が number 型であることを示すために infer キーワードを使用する。
  • 割ることができる場合は、Math.floor() を用いて整数部分だけを返却する。
  • infer キーワードはTypeScriptにおいて、型変数を宣言する際に型の一部を抽出できるようにします。

Divide<1, 0> のように B が 0 のような割り算が行われる場合には、conditional type によっい never が返されます。

また、問題文中で「非負整数だけを考慮する」と書かれているため、0未満の値を計算することは想定されていません。