TypeScriptにおける型変数

ジェネリクスの概念をよりよく理解するために、 最初の関数、恒等関数を作成してみましょう。 この関数は、渡されたものと全く同じものを同じ型で返します。

まずは、個別に関数のバリアントを書いてみましょう。

パラメータとして数値を受け取り、数値を返す関数を書きます:

typescriptfunction func(data: number): number {
  return data;
}

次に、パラメータとして文字列を受け取り、文字列を返す関数を書きます:

typescriptfunction func(data: string): string {
  return data;
}

さて、これらすべてを1つの関数で行えるようにしたいと思います。 つまり、汎用化を実行したいのです。

そのためには、データ型を保持する型変数を使用します。 このような変数は、関数のパラメータを囲む丸括弧の前の山括弧内で宣言されます。 この変数にTという名前を付けて(任意の名前で構いません)宣言してみましょう:

typescriptfunction func <T>(ここにパラメータ) {
  return data;
}

これにより、パラメータの型を格納し、その後で戻り値として指定するために使用できる変数Tが得られます。

パラメータの型をこの変数として指定しましょう:

typescriptfunction func <T>(data: T) {
  return data;
}

これで、パラメータは任意の型で渡すことができ、その型は変数Tに保存されることになります。

次に、変数Tの値を関数の結果の指定として使用しましょう:

typescriptfunction func <T>(data: T): T {
  return data;
}

これで、関数の結果の型はパラメータの型から得られるようになります。 確認してみましょう。

数値を指定して関数を呼び出します:

typescriptconsole.log( func(3) );   // 3を出力

文字列を指定して関数を呼び出します:

typescriptconsole.log( func('x') ); // 'x'を出力
Задание 1

2つの数値または2つの文字列をパラメータとして受け取る関数を作成してください。 関数は結果としてパラメータの合計を返す必要があります。