Ich benutze typescipt 2. Ich schreibe einige Parser-Methode, die ein Modell vom Server empfängt und wandelt es in eine Instanz, die ich verwenden kann.Typescript (Angular2) Generischer Konstruktor Fabrik
Code:
export interface Constructable {
copy(other : any) : void;
}
//in my Convert class which converts server responses to model
private static _parseT<T extends Constructable>(obj : any) : T {
let instance = Object.create(T); // the row of the compile-time error
instance.constructor.apply(instance);
instance.copy(obj);
return instance;
}
und vermuten lässt ich die folgende Klasse
export class Foo implements Constructable {
private test : string = null;
public copy(other:any) : void {
this.test = other.test;
}
}
ich eine Kompilierung Fehler haben
findenkonnte nicht Namen T
jetzt, ich bin sicher, es ist nicht die Syntax, aber ich konnte nicht finden, wie.
Um die Dinge zu klären. Dies ist, wie die useage wie folgt aussieht:
public static ParseFoo(data: any) : Foo{
return Convert._parseT<Foo>(data.mResult); // data is a server response object
}
HINWEIS
Obwohl einige Fabrik Muster dieses Problem lösen würde ich wirklich mit dem Copy
Methode bleiben möchte anstatt einige Generate
, die erzeugt und gibt eine Instanz
ist es synjektiv falsch. clazz: new (... args: any []): T ist falsch. versucht, es in clazz umzuwandeln: new (... args: any []) => T und dann habe ich Kompilierfehler sowie –
oh ja Entschuldigung, ich werde diesen Tippfehler beheben, aber der zweite sollte kompilieren ... oO (Überprüfen Sie das Beispiel, das ich verband, kompiliert es tadellos) – Supamiu
Eigentum 'Kopie' existiert nicht auf Art 'neu (... args: irgendwelche []) => T' Art 'neu (...args: any []) => T 'ist nicht dem Typ T zuweisbar –