Единственная проблема, с которой сталкивается ваш код, это то, что значение this
неверно.Изменив это значение на target
, ваш код работает отлично.
class Customer {
@hashify
public firstname: string;
public lastname: string;
constructor(firstname : string, lastname : string) {
this.firstname = firstname;
this.lastname = lastname;
}
}
function hashify(target: any, key: string) {
var _value = target[key];
var getter = function () {
return '#' + _value;
};
var setter = function (newValue) {
_value = newValue;
};
if (delete target[key]) {
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
В вашем примере это происходит потому, что параметр target
в интерфейсе PropertyDecorator
является ссылкой на объект, в которомДекоратор применяется.