LoginSignup
1
1

More than 5 years have passed since last update.

TypeScript で、入力に応じて特定の型を返す Overload Signature の使い方

Last updated at Posted at 2018-10-24

題材

関数 invert があり、入出力の型が下記の通りとする

  • 入力が string のとき -> number を返す
  • 入力が number のとき -> string を返す

Overload Signature 使わないでやる

このとき、下記のように書いても動作するが

export function invert(n: number | string): string | number {
  return typeof n === 'string' ? parseInt(n) : String(n)
}

この書き方の場合、関数を使う側で型のチェックが必要になる。理由は、 invert()string もしくは number を返す型と認識されるため。

image.png

Overload Signature を使うと

ここで Overload Signature の出番。
入力に応じて、どの型が返されるのかを指定することができる。

export function invert(n: string): number // <-- string の時は number を返す
export function invert(n: number): string // <-- number の時は string を返す
export function invert(n: number | string): string | number {
  return typeof n === 'string' ? parseInt(n) : String(n)
}

関数に注釈をつける感じ。

今度は、 invert 呼び出し側での型チェックが不要になった。また、誤った型指定をするとエラーにもなる。

image.png

ついで

ちなみに、下記のように引数の数を変更することも可能。ちゃんと型推論してくれるTypeScriptすごい・・・

image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1