この解答例は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未満の値を計算することは想定されていません。