この解答例は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;
AとBの型変数にはそれぞれnumberを制約として設定する。- 割る数
Bが 0 の場合は計算できないため、neverを返却する。 - 割られる数
Aが 0 の場合は必ず結果は 0 となるため、0 を返却する。 AとBの両方がnumber型であることを示すためにinferキーワードを使用する。- 割ることができる場合は、
Math.floor()を用いて整数部分だけを返却する。 inferキーワードはTypeScriptにおいて、型変数を宣言する際に型の一部を抽出できるようにします。
Divide<1, 0> のように B が 0 のような割り算が行われる場合には、conditional type によっい never が返されます。
また、問題文中で「非負整数だけを考慮する」と書かれているため、0未満の値を計算することは想定されていません。