function logAccess(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalGet = descriptor.get
const originalSet = descriptor.set
if (originalGet) {
descriptor.get = function() {
console.log(`Getting value of ${propertyKey}`)
return originalGet.call(this)
}
}
if (originalSet) {
descriptor.set = function(value: any) {
console.log(`Setting value of ${propertyKey} to ${value}`)
originalSet.call(this, value)
}
}
}
class User {
private _age: number = 0
@logAccess
get age() {
return this._age
}
set age(value: number) {
if (value < 0) throw new Error("Age must be positive")
this._age = value
}
}
const user = new User()
user.age = 30
console.log(user.age)