スタートページJavascriptTypeScript
TypeScriptの概要型指定の基本(1)型指定の基本(2)型指定の基本(3)← 型指定の基本(4)

TypeScript 型指定の基本(4)Generics


Generics

Genericsは抽象的な型引数を使用して、型の異なる指定を統合するものです。

例えば、「x が数値型でなければならない」ことを、「引数 x は数値型であり、その値を数値型として戻す」関数でチェックするとします。

    function 数値型チェック(x: number): number {
        return x;
    }
    var y = 数値型チェック(123);
    var z = 数値型チェック('abc');

同様に、文字列型については、次の関数になります。

    function 文字列型チェック(a: string): string {
        return a;
    }
    var b = 文字列型チェック(123);
    var c = 文字列型チェック('abc');

これを一つにまとめるには、number や string の型指定子を変数にすることが必要です。
その型指定子の変数名は、慣習的に T, U が用いられます。そして、引数として記述するには、型指定子を < > で囲みます。

  1  function 型チェック<T>(x: T): T {
  2      return x;
  3  }
  4  var y = 型チェック<number>(123);
  5  var z = 型チェック<number>('abc');
  6  var b = 型チェック<string>(123);
  7  var c = 型チェック<string>('abc');

例えば、行4のとき型チェック行1は次のようになります。
  function 型チェック<number>(123: number): number {

ClassでのGenerics

ClassでのGenericsおよび複数の型指定子の例を示します。

  1  class 型クラス<T, U> {
  2      x: T;
  3      a: U;
  4      constructor(x:T, a:U) {
  5          this.x = x;
  6          this.a = a;
  7      }
  8  }
  9  var p = new 型クラス<number, string>(123,'abc');
 10  var q = new 型クラス<string, number>('abc',123);
 11  var r = new 型クラス<number, string>('def','abc');
 12  var s = new 型クラス<string, number>(123, 456);