2017-01-08 59 views
0

我試圖調用帶有兩個泛型的函數,但收到類型不可分配的錯誤。如何解決`類型_的參數不能分配給使用多種泛型的'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不一定。酒吧是否實現了foo的字符串版本? –

+0

您已修改了編輯中的代碼,但問題沒有解決。 'T1'可以是任何東西,所以'someObject'不一定是'T1'。 – cartant

+0

爲什麼'bar'是通用的?爲什麼不把它做成'class bar extends foo '? – artem

回答

3

的問題是,你傳遞一個string未指定的類型參數T1T2。你怎麼能說這些字符串是這些類型中的有效值?

如果你說

class bar extends foo<string, string> 

然後它會工作。但是,這似乎並不像你想要完成的。你想要做什麼?


您的擴展的例子:

什麼也改變了這裏。爲什麼你想使bar本身是通用的?它看起來像bar將滿足foo的具體類的泛型,這意味着bar不需要是通用的。

class bar extends foo<someObject, otherObject> 
+0

我擴展了我的例子 –

+0

@RedRidingHood更新。 – Paarth

+0

真的,太簡單了。謝謝! –

相關問題