function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`调用 ${propertyKey} 方法前`);
const result = originalMethod.apply(this, args);
console.log(`调用 ${propertyKey} 方法后`);
return result;
};
return descriptor;
}
class User {
private name: string;
constructor(name: string) {
this.name = name;
}
@log
getName() {
return this.name;
}
}
const user = new User('John');
console.log(user.getName());