2017-02-26 4 views
0

Ich möchte eine Klasse mit Dekorateuren erweitern, aber nicht genau wissen, wie. Mein aktueller Ansatz ist wie folgt:Erweitern Klassen mit Dekoratoren in TypeScript

function Foo(value: string) { 
    return function(target: Function) { 
     let injected = Object.assign(target.prototype, { foo: value }); 
     return injected; 
    } 
} 

@Foo("Hello world") 
class Bar { 
} 

let instance = new Bar(); 
console.log(instance.foo); // Should say "Hello World" 

Aber ich kann meine Klasse nicht mehr instanziiert: „Typeerror: Bar ist kein Konstruktor“.

Wo ist mein Fehler?

Antwort

1

Sie müssen kein neues Objekt vom Decorator zurückgeben. In diesem Fall wird Zielobjekt geändert werden, so

nur
function Foo(value: string) { 
    return function(target: Function) { 
    Object.assign(target.prototype, { foo: value }); 
    } 
} 

sollte Leider

+0

gut funktionieren diese nicht funktioniert. Das 'bar'-Objekt bleibt unverändert, wenn versucht wird,' instance.foo' zu erhalten, gibt 'Property'foo' beim Typ'Bar' nicht. – nehalist

+0

@nehalist Hast du eine Flagge 'experimentalDecorators' in deiner tsconfig? Es funktioniert auf meinem lokalen und in Spielplatz https://www.typescriptlang.org/play/ –

+0

@nehalist Aber wenn Sie über Warnen vom Typoskript sprechen, ist es nur, weil TS-Compiler diese Eigenschaft nicht auflösen kann. Überprüfen Sie einfach generierte JS in Spielplatz –