// 定义装饰器
function important(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
// 添加元数据
Reflect.defineMetadata('isImportant', true, target, propertyKey);
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
// 调用方法时获取元数据
const isImportant = Reflect.getMetadata('isImportant', target, propertyKey);
console.log(`This method is important: ${isImportant}`);
return originalMethod.apply(this, args);
};
return descriptor;
}
class MyClass {
@important
myMethod() {
console.log('Executing myMethod');
}
}
const myObj = new MyClass();
myObj.myMethod();