magniut
Version:
A lightweight library that add typing at runtime for typescript projects
37 lines (36 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var typed_factory_1 = require("./typed.factory");
/**
* @Typed is a property decorator, takes a model as param. generates typed getter and setter
*
* How to use ?
* @Typed(CustomModel)
* customProperty: CustomModel;
*
*
* @param model
* @returns {(target:Object, property:string)=>undefined}
* @constructor
*
* @author: Maamar Yacine MEDDAH <my.meddah@gmail.com>
*/
function Typed(model) {
return function (target, property) {
// define another attribute (private) in order to avoid stackoverflow
Object.defineProperty(target, '_' + property, {
writable: true,
value: target[property]
});
// define getter and setter, for the property that point on the private attribute freshly defined
Object.defineProperty(target, property, {
get: function () {
return this['_' + property];
},
set: function (value) {
this['_' + property] = typed_factory_1.TypedFactory.create(value, model);
}
});
};
}
exports.default = Typed;