106

単一の型制約を持つこの例のようなジェネリック インターフェイスがあります。

export interface IExample<T extends MyClass> {
    getById(id: number): T;
}

1 つだけではなく、複数の型制約を指定することは可能ですか?

4

3 に答える 3

122

Typescript は、ジェネリック型の多重継承を取得するための構文を提供していません。ただし、Union 型と Intersection 型を使用して、同様のセマンティクスを実現できます。あなたの場合、交差点が必要です:

interface Example<T extends MyClass & OtherClass> {}

両方のタイプの Union の場合:

interface Example<T extends MyClass | OtherClass> {}
于 2016-08-11T08:47:00.267 に答える
40

これに対する回避策は、スーパーインターフェースを使用することです(これは、「なぜインターフェースがクラスから継承できるようにするのか」という質問にも答えます)。

interface ISuperInterface extends MyClass, OtherClass {

}

export interface IExample<T extends ISuperInterface> {
    getById(id: number): T;
}
于 2013-06-15T16:43:05.303 に答える