javascript - Dynamische Erweiterung einer Klasse in einer TypeScript-Annotation
Angenommen, ich habe 2 Klassen, A und B. Ich möchte eine TypeScript-Anmerkung erstellen, die dasselbe macht, wie eine Klasse dynamisch zu erweitern. Ich kann extends nicht verwenden, weil die Klasse A erst zur Laufzeit bekannt ist. Also möchte ich als Ergebnis class A extends B {} Aber mit dynamischem A.
Ich habe versucht, eine Anmerkung zu erstellen :
function extendsWithB(target) {
//do something to extends the target with B class
return target;
}
Dies könnte so verwendet werden:
@extendsWithB
Class A {}
Hast du eine Idee, was ich in meine Anmerkung schreiben sollte?
Bearbeiten: Diese Frage ist rein theoretisch. Ich möchte das nicht in der Produktion oder irgendwo anders ausprobieren.
Antwort #1
Ich denke, du kannst einen ähnlichen gewünschten Effekt erzielen, indem du so etwas machst:
export function Ext(bCtor: any)
{
return (aCtor: any) =>
{
Object.getOwnPropertyNames(bCtor.prototype).forEach(name => {
aCtor.prototype[name] = bCtor.prototype[name];
});
}
}
Und wende es an:
@Ext(B)
class A
{
//...
}
Natürlich keine weiteren Typprüfungen, da TypeScript nichts über diesen Hack weiß.
