import dojoDeclare from 'dojo/_base/declare';
/**
* A decorator that converts a TypeScript class into a declare constructor.
* This allows declare constructors to be defined as classes, which nicely
* hides away the `declare([], {})` boilerplate.
*/
export default function (... mixins: Object[]) {
return function (target: Function) {
let declared = dojoDeclare(mixins, target.prototype);
// Bring getters and setters along for the ride
Object.keys(target.prototype).forEach(key => {
let descrip = Object.getOwnPropertyDescriptor(target.prototype, key);
if (typeof descrip.get == 'function' || typeof descrip.set == 'function') {
Object.defineProperty(declared.prototype, key, descrip);
}
});
return declared;
};
}
If you use the
declareDecorator
on aclass
all the getters and setters are lost.I was having issues making a PR so here is the updated version of https://github.com/dojo/typings/blob/master/examples/basicApp/src/app/declareDecorator.ts: