ジェネリクス

型パラメータの制約

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

型パラメータには制約を追加できます。制約を追加することで、型パラメータが特定の型(またはそのサブタイプ)であることを表すことができます。 次に示すのは、型パラメータに制約を追加する例です。

interface FooInterface1 {
    foo1(): string;
}

class FooClass1 implements FooInterface1 {
    public foo1(): string {
        return "foo1";
    }
}

interface FooInterface2 {
    foo2(): string;
}

class FooClass2 implements FooInterface2 {
    public foo2(): string {
        return "foo2";
    }
}

// 型パラメータ T に 制約 extends FooInterface1 を追加
class Bar<T extends FooInterface1> {
}

var bar1 = new Bar<FooClass1>();

// FooClass2 は FooInterface1 のサブタイプではないのでコンパイルエラー
var bar2 = new Bar<FooClass2>();

型パラメータに制約を追加するためには、型パラメータに対して extends を使用します。 上記の例では、型パラメータ T に対して FooInterface1 の制約を追加しているため、 インスタンスの生成時に、型引数として FooInterface1 (または FooInterface1 のサブタイプ)以外を指定すると、 コンパイルエラーとなります。