TypeScript - Verwendung eines generischen Typparameters als Parameter
Ich versuche, eine generische Funktion zu erstellen, die eine andere Funktion mit einem any-Typ-Parameter aufruft. Das habe ich versucht:
static GetInstance<T>(): T {
return <T>injector.get(T); // get(param: any): any
}
Das Problem ist, dass dies nicht kompiliert. Ich bekomme den Fehler Kann den Namen 'T' nicht finden.
Ich habe get(typeof T) versucht, aber typeof T ist der String "function".
Was kann ich tun?
Zur Klarstellung: Die get()-Methode akzeptiert Typen. Zum Beispiel können Sie sie so verwenden:
import { MyService } from '..'
constructor(){
let val = this.injector.get(MyService);
}
Antwort #1
Generics in TypeScript exist nur zur Designzeit. Sie werden niemals in irgendein JS ersetzt kompiliert. Aber was du versuchst zu tun, ist tatsächlich, die Generics zu verwenden und zu erwarten, dass sie in JavaScript kompiliert werden.
Mit anderen Worten, T existiert nicht. Es wird nur für dich erweitert. Du kannst es nicht als Variable übergeben, da es keine Variable ist. Wie gesagt, es ist völlig imaginär.
Also muss die GetInstance-Methode die get-Funktion mit einem tatsächlichen Wert aufrufen und nicht T, da dieser nicht existiert.