2017-02-08 4 views
0

Ich fange an zu denken, dass das nicht möglich ist. Ich habe eine generische abstrakte Basisklasse, die ich den Typ von T verfolgen möchte. Die einzige Möglichkeit, dies zu erreichen, ist, einen Parameter für meine Basisklasse zu haben und den generischen Typ im Superkonstruktor neu zu deklarieren.Wie kann ich den generischen Typ einer Abstracts-Klasse erfassen?

abstract class Base<T> { 
    genericType: any; 

    constructor(genType: any) { 
    this.genericType = genType; 
    } 
} 

class Concrete extends Base<String> { 
    constructor() { 
    super(String); 
    } 
} 

let obj = new Concrete(); 
document.write(obj.genericType); 

Was ich zu tun hoffte, ist einfach etwas in der Basis in meiner Basisklasse zu haben.

genericType: any = T; 
+0

Allgemeine Einschränkungen gibt es nur in der Kompilierung, JavaScript kein Konzept von Generika hat, so im laufenden Betrieb nicht 'T' verweisen können. Was genau willst du machen? –

+0

Das liegt daran, dass ich den Generics-Konstruktor-Prototyp anderswo in meinem Code als Funktionsargumente verwende. – onetwothree

+1

Sie machen das nicht klarer. Bitte fügen Sie Ihre Frage hinzu und erläutern Sie, mit welchem ​​Problem Sie konfrontiert sind und was Sie erreichen möchten. Sie können 'T' nicht zur Laufzeit verwenden, aber wenn Sie Ihr Szenario erklären, erhalten Sie möglicherweise andere Lösungen. –

Antwort

1

Wenn Sie anrufen super(String) Sie den Konstruktor Funktion der String-Klasse tatsächlich vorbei.

Sie können Ihre Basisklasse auf diese Weise umschreiben:

abstract class Base<T> { 
    genericTypeConstructor: {new(): T}; 

    constructor(genType: {new(): T}) { 
     this.genericTypeConstructor = genType; 
    } 
} 
Verwandte Themen