function validateNumber(target: any, propertyKey: string) {
let value: any;
const getter = function () {
return value;
};
const setter = function (newValue: any) {
if (typeof newValue!== 'number') {
throw new Error(`The value of ${propertyKey} must be a number.`);
}
value = newValue;
};
if (delete target[propertyKey]) {
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
class Example {
@validateNumber
numberProperty: number;
}
// 测试
try {
const example = new Example();
example.numberProperty = 10;
console.log(example.numberProperty);
example.numberProperty = 'not a number';
} catch (error) {
console.error(error.message);
}