2017-01-08 11 views
0

2つのジェネリックで関数を呼び出そうとしましたが、型が割り当てられないというエラーが発生しました。複数のジェネリックを使用する場合、 `_型の引数を 'T1'型のパラメータに代入することはできません。

abstract class foo<T1, T2> { 
    protected readonly generic1 : T1; 
    protected readonly generic2 : T2 
    constructor(t1: T1, t2: T2) { 
     this.generic1 = t1; 
     this.generic2 = t2; 
    } 
} 

class bar<T1, T2> extends foo<T1, T2> 
{ 
    constructor() 
    { 
     super(new someObject(), new otherObject()); 
    } 

    public myFunction() 
    { 
     // I want to retain type information 
     this.generic1.someMethod(); 
     this.generic2.otherMethod(); 
    } 
} 

// Objects that have nothing in common, so can't interface them 
class someObject { 
    public someMethod() { }; 
} 
class otherObject { 
    public otherMethod() { }; 
} 

Typescript Playground

+0

"これは"文字列 "型であり、T1とT2は必ずしも必要ではないからです。 barはfooの文字列バージョンを実装していますか? –

+0

編集でコードを修正しましたが、問題は解決されていません。 'T1'は何でもよいので、' someObject'は常に 'T1'になるとは限りません。 – cartant

+0

なぜ 'bar'は一般的なのですか?なぜそれを単に 'class bar extends foo 'にしないのですか? – artem

答えて

3

問題は、未指定の型パラメータT1T2stringに渡しているということです。どのように文字列がこれらの型のいずれかの有効な値であると言うことができますか?

あなたは

class bar extends foo<string, string> 

を言っていた場合、それが動作します。しかし、それはあなたが達成しようとしているようではありません。何ができるようにしようとしていますか?


あなたの拡張例:

何もここに変わっていません。なぜbar自体が一般的なものにしたいのですか? barは具体的なクラスのfooのジェネリックを実行するように見えます。つまり、barは全くジェネリックである必要はありません。

class bar extends foo<someObject, otherObject> 
+0

私の事例を拡張しました –

+0

@RedRidingHoodを更新しました。 – Paarth

+0

だから簡単です。ありがとう! –

関連する問題