TypeScript class decorator that modifies object instance TypeScript class decorator that modifies object instance typescript typescript

TypeScript class decorator that modifies object instance


Why not just assign those properties to the prototype, and subsequently assign to the instance on first invocation

// decoratorfunction addAndCall(cb: Function, newField: string) {  // cb is now available in the decorator  return function(ctor: Function): void {    Object.defineProperty(ctor.prototype, newField, {      value: function(...args: any[]) {        return Object.defineProperty(this, newField, {          value: function(...args: any[]) {            console.log(newField, ...args);          }        })[newField](...args);      }    });    cb(ctor);  }}let callMe = (decoratedCtor) => console.log(decoratedCtor);@addAndCall(callMe, 'propertyName')class AddToMe {}let addToMe = new AddToMe();(<any>addToMe).propertyName(1, 2);


Here's a working version:

function addAndCall(target: any) {    var original = target;    function construct(constructor, args) {        var c: any = function () {            this.newAttribute = "object instance value";            ExternalModule.externalFunction(this);            return constructor.apply(this, args);;        }        c.prototype = constructor.prototype;        return new c();    }    var f: any = function (...args) {        return construct(original, args);    }    f.prototype = original.prototype;    return f;}

(code in playground)