ジェネリクス

ジェネリック関数

このエントリーをはてなブックマークに追加
最終更新日 2016-12-31

関数は、型パラメータを指定することでジェネリック関数として宣言することができます。 次に示すのはジェネリック関数の例です。

function foo<T>(x: T): T {
    return x;
}

var result1: string = foo<string>("TypeScript");  // "TypeScript"
var result2: number = foo<number>(123);           // 123

T が型パラメータです。型パラメータはカンマで区切ることで複数指定できます。 上記の例では、型パラメータ T は、関数を呼び出す段階で <> で指定された型引数 string や number に置き換えられます。 foo<string>() は、以下の関数と同等です。

function foo(x: string): string {
    return x;
}

同様に、foo<number>() は、以下のクラスと同等です。

function foo(x: number): number {
    return x;
}

なお、型引数は明示的に指定しなくても、関数の引数から推論される場合があります。 例えば以下のような呼び出しでは、関数の引数に文字列を指定しているため、型引数は string に推論されます。

var result = foo("TypeScript");  // foo<string>("TypeScript") と同等