Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロダクト開発でも使おう 関数のオーバーロード

プロダクト開発でも使おう 関数のオーバーロード

Avatar for yoiwamoto

yoiwamoto

June 06, 2025
Tweet

More Decks by yoiwamoto

Other Decks in Programming

Transcript

  1. Yo Iwamoto / 岩元 陽 自己紹介 ❏ SmartHR で勤怠管理機能を作っています ❏

    近況: Switch 2 って本当に当たるんですか? @yoiwamoto
  2. オーバーロードのモチベーション 特に型を工夫しない場合 🤔 引数が string なら string、 number なら number

    を返すような関数 → 実際に渡した引数の型から動的に推論さ せることができず、常に `number | string`
  3. Generics で対応してみる 💭 value を T と置いて、返り値型を分岐する (改行の問題ももちろんあるけど、) - 一定、実装が複雑になる。

    - as T extends number ? number : string のような as の使用が避けられない オーバーロードのモチベーション
  4. 実現方法 ざっくりこんな感じで実現できる。 ポイントを分解すると、 ① Template Literal Types ② infer による

    literal からの型の抽出 ③ 関数のオーバーロード キモは、パスパラメータを含まないパター ンの route では、引数を渡さなくてもエ ラーにならないこと
  5. 引数にパターンがあるだけであれば、理論上ただの Union でほぼ表現できる。 が、Positional Argument の構造が分岐できない! ⚠ 使いどき ① 引数型を分岐したい場合

    公式のサンプルコードでは Positional Argument の構造が分岐していて、 makeDate(1749198911) とも呼べるし、 makeDate(6, 6, 2025) とも呼べる