2017-01-08 3 views
0

Ich habe versucht, eine Funktion mit zwei Generics aufzurufen, aber einen Fehler erhalten, dass der Typ nicht zuweisbar ist.Wie zu lösen `Argument des Typs _ ist nicht zu Parameter des Typs 'T1'zuweisen.` Bei der Verwendung mehrerer Generika

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

Das liegt daran, "" ist vom Typ "String" und T1 und T2 sind nicht unbedingt. Implementiert Bar eine String-Version von foo? –

+0

Sie haben den Code in einer Bearbeitung geändert, das Problem ist jedoch nicht behoben. 'T1' könnte alles sein, also kann' someObject' nicht immer ein 'T1' sein. – cartant

+0

Warum ist 'bar' generisch? Warum sollte es nicht einfach 'class bar extends foo '? – artem

Antwort

3

Das Problem ist, dass Sie in einem string nicht näher bestimmten Typ Parameter T1 und T2 vorbei sind. Wie können Sie sagen, dass die Zeichenfolge in diesen beiden Typen ein gültiger Wert ist?

Wenn Sie waren

class bar extends foo<string, string> 

dann würde es funktionieren sagen. Aber das scheint nicht das zu sein, was Sie erreichen wollen. Was versuchst du zu tun?


Ihr erweitertes Beispiel:

Nichts hat sich hier verändert. Warum willst du bar selbst generisch machen? Es sieht aus wie bar wird foo Generika mit konkreten Klassen zu erfüllen, was bedeutet, dass bar muss überhaupt nicht generisch sein.

class bar extends foo<someObject, otherObject> 
+0

Ich erweiterte mein Beispiel –

+0

@RedRidingHood aktualisiert. – Paarth

+0

Doh, so einfach. Vielen Dank! –

Verwandte Themen