TypeScript 自定义装饰器
// 定义装饰器工厂函数
function logMethodDecorator(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
// 包装原有方法,添加日志记录
descriptor.value = function(...args) {
console.log(`Calling ${propertyKey} with args: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`Result of ${propertyKey}: ${result}`);
return result;
};
}
// 使用装饰器
class MyClass {
@logMethodDecorator
myMethod(arg: string) {
return `processed ${arg}`;
}
}
// 实例化并使用装饰器包装的方法
const myInstance = new MyClass();
myInstance.myMethod("example");
这个例子中,我们定义了一个logMethodDecorator
装饰器工厂函数,它接收三个参数:目标对象target
、属性名propertyKey
和属性描述符descriptor
。然后,我们替换了原有的方法value
为一个新函数,在调用原有方法前后添加了日志记录。最后,我们在一个类MyClass
的myMethod
方法上应用了这个装饰器。这样,每次调用myMethod
方法时,都会先打印输入参数和方法调用,然后打印返回结果。
评论已关闭