TypeScriptにおける型変数
ジェネリクスの概念をよりよく理解するために、 最初の関数、恒等関数を作成してみましょう。 この関数は、渡されたものと全く同じものを同じ型で返します。
まずは、個別に関数のバリアントを書いてみましょう。
パラメータとして数値を受け取り、数値を返す関数を書きます:
function func(data: number): number {
return data;
}
次に、パラメータとして文字列を受け取り、文字列を返す関数を書きます:
function func(data: string): string {
return data;
}
さて、これらすべてを1つの関数で行えるようにしたいと思います。 つまり、汎用化を実行したいのです。
そのためには、データ型を保持する型変数を使用します。
このような変数は、関数のパラメータを囲む丸括弧の前の山括弧内で宣言されます。
この変数にTという名前を付けて(任意の名前で構いません)宣言してみましょう:
function func <T>(ここにパラメータ) {
return data;
}
これにより、パラメータの型を格納し、その後で戻り値として指定するために使用できる変数Tが得られます。
パラメータの型をこの変数として指定しましょう:
function func <T>(data: T) {
return data;
}
これで、パラメータは任意の型で渡すことができ、その型は変数Tに保存されることになります。
次に、変数Tの値を関数の結果の指定として使用しましょう:
function func <T>(data: T): T {
return data;
}
これで、関数の結果の型はパラメータの型から得られるようになります。 確認してみましょう。
数値を指定して関数を呼び出します:
console.log( func(3) ); // 3を出力
文字列を指定して関数を呼び出します:
console.log( func('x') ); // 'x'を出力
2つの数値または2つの文字列をパラメータとして受け取る関数を作成してください。 関数は結果としてパラメータの合計を返す必要があります。