function validatePrice(target: any, propertyKey: string) {
let value: number;
const getter = function () {
return value;
};
const setter = function (newValue: number) {
if (typeof newValue!== 'number' || newValue <= 0) {
throw new Error('Price must be a number greater than 0');
}
value = newValue;
};
if (delete target[propertyKey]) {
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
class Product {
@validatePrice
price: number;
constructor(price: number) {
this.price = price;
}
}