function validateName(target: any, propertyKey: string) {
let value: string;
const getter = function () {
return value;
};
const setter = function (newValue: string) {
if (newValue.length < 3 || newValue.length > 20) {
throw new Error('Name length must be between 3 and 20 characters');
}
value = newValue;
};
if (delete target[propertyKey]) {
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
class User {
@validateName
name: string;
constructor(name: string) {
this.name = name;
}
}