typescriptの型シグネチャとオーバーロードとジェエリック型

function hello(text) {
  return text
}

シグネチャとして型を抜き出す。

type hello = {
  (text: string) => string;
}

でも1つの型しか扱えてなくて不便。
なので、オーバーロードでnumberにも対応

type hello = {
  (text: string) => string;
  (text: number) => number;
  (text: object) => object;
}

なので、オーバーロードでnumberにも対応できたが、構造が不明なobject型には対応できない。

そこで、ジェネリック型を使って書き換える。
型指定の汎用性が高まる。

今回の例でいうTは一度推論されたらずっとその型を維持しようとする。
これが原因で型エラーになることも多々あるけどね。

<T>の<>はジェネリック型のパラメーター指定方法。

type hello = {
  <T>(text: T) => T;
}