2016-04-28 25 views
0

Ich bin in einer Situation, in der ich den Typ des generischen Typs ermitteln möchte, der einer generischen Klasse zur Verfügung gestellt wird. Zum Beispiel unter der Annahme, ich einen Union-Typen habe, würde Ich mag verschiedene Aktionen im Konstruktor nehmen basierend auf der Art verwendet:Ermitteln des Typs des Klassentypparameters Typescipt

type MyType = string | number; 
class Foo<T extends MyType>{ 
    private _something; 
    constructor(_bar?: SomeFunc<T>){ 
      if(...)? 
    } 
} 

Vom advanced type section ich weiß, dass ich die Art der Parameter Funktionen bestimmen kann, aber ich kann nicht scheinen, um einen Weg zu finden, eine Überprüfung des Typs des Generikums durchzuführen, das der tatsächlichen Klasse zur Verfügung gestellt wird. Der Versuch, T in irgendeiner Weise zu referenzieren, führt zu "Name nicht finden 'T' Fehler (# TS2304). Ich habe mehrere Beiträge gefunden such as this one, aber sie scheinen sich mit Funktionsparametern zu befassen, auf die der erste Link Antworten lieferte.

If dies ist nicht möglich, da es immer mehr auf diese Weise zu wirken, gibt es ein weiteres Muster, das ich hier einsetzen kann?

Antwort

0

ich mag würde die Art der gattungsgemäßen Art zu einer generischen Klasse

zur Verfügung gestellt, um zu bestimmen Generics sind gelöscht zur Laufzeit.So Sie c Annot verwenden T in einer Laufzeitprüfung.

+0

Vielen Dank und ich verstehe, dass ich nach mehr einer Kompilierzeitoperation suche, die ich verwenden könnte, um eine Folge-Methode zu wählen, um zu verwenden. –

+0

@AndrewHunter Sie müssen mehr von einem * was willst du * aber die allgemeine Idee ist, geben Sie auch eine Instanz von 'T' z. 'Konstruktor (_bar ?: SomeFunc , someInstance: T) {' und dann können Sie die Überprüfung auf 'someInstance' – basarat

+0

danke für die Antwort, ich hatte gehofft zu versuchen, weg von der Bereitstellung einer Instanz zu bekommen, aber es scheint, dass das nicht ist in Typoskript möglich. Ich werde dieses Muster verwenden, danke nochmal. –

Verwandte Themen