Ich habe in dem Erstellen von Klassen aus Strings in Javascript suchen, bis ich auf diese kam:in Typoskript/Angular2
var instance = new window[classString]();
Dies ist jedoch nicht, da es in Maschinenschrift, zu funktionieren scheint ist Typinformation fehlt.
Details:
interface SomeInterface{
structuredData: any;
}
class A implements SomeInterface {
}
ich in einer Datenbank JSON serialisiert Klasseninformationen bin zu speichern. Nehmen wir an, ich habe eine Modellklasse A
, die Eigenschaften dieser Klasse werden als JSON-Zeichenfolge im Frontend serialisiert und zusammen mit dem Klassennamen, der diese Daten darstellt, an die Datenbank gesendet, d. H. Die Datenbank enthält eine class_type
-Spalte, die den Namen der Klasse enthält. In diesem Fall wäre das die Zeichenfolge "A". Nun möchte ich diese Daten in meine Anwendung zurückholen und dynamisch eine Instanz aus diesen Daten konstruieren.
Wenn wir die Javascript Instanziierung Code sehe ich oben gefunden, würde ich gerne so etwas wie dies zu tun:
let instance = new window['A']();
instance.structuredData = foo;
Da diese Klassen generische Parameter enthalten, die auf eine bestimmte Schnittstelle haften ich wäre in der Lage zu zuweisen die serialisierten Daten zu diesen neu instanziierten Instanzen.
Ich benutze Angular2/Webpack und würde wirklich alle Hinweise, wie dies zu tun ist.
Wenn Sie den Code verwenden, wie ich oben erwähnt, erhalte ich die folgende Compiler-Fehler:
Cannot use 'new' with an expression whose type lacks a call or construct signature.
Wenn ich versuche, die strenge Typprüfung zu umgehen, indem
mitdeclare var window;
ich folgende Fehlermeldung erhalten :
window['classString'] is not a constructor
Welche Fehler Sie mit Ihrem Typoskript Code erhalte? –
@MichaelLiu Fehlermeldung hinzugefügt. –
Ich kann den Fehler nicht reproduzieren. Wenn ich 'instance = new window ['A']();' in eine Standalone-.ts-Datei lege, kompiliert es sich gut. –