ジェネリクス

ジェネリック型

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

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

class Foo<T> {
    constructor(private x: T) {
    }
    
    public result(): T {
        return this.x;
    }
}

var foo1 = new Foo<string>("TypeScript");
var result1: string = foo1.result();  // "TypeScript"

var foo2 = new Foo<number>(123);
var result2: number = foo2.result();  // 123

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

class Foo {
    constructor(private x: string) {
    }
    
    public result(): string {
        return this.x;
    }
}

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

class Foo {
    constructor(private x: number) {
    }
    
    public result(): number {
        return this.x;
    }
}

なお、型パラメータは基底クラスやインターフェイスとして使用することはできません。 つまり、以下のようなコードはコンパイルエラーになります。

// コンパイルエラー
class Foo1<T> extends T {
}

// コンパイルエラー
class Foo2<T> implements T {
}

Array

TypeScript の配列は次のように宣言します。

var result: number[] = [1, 2, 3];

この形式は、型パラメータを指定したグローバルインターフェイス型 Array で書き換えることができます。 Array を使用した場合は、同じ配列を次のように宣言できます。

var result: Array<number> = [1, 2, 3];