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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

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) とも呼べる