面试题答案
一键面试在TypeScript中,要向方法装饰器函数传递额外参数,可以通过返回一个内部函数来实现。以下是具体描述和代码示例:
描述
- 定义一个外部函数,该函数接收要传递的额外参数。
- 在外部函数内部返回一个真正的装饰器函数,这个内部函数接收
target
、propertyKey
和descriptor
参数,与普通方法装饰器函数参数一致。 - 在内部装饰器函数中,可以使用外部函数传入的额外参数进行相应的操作。
代码示例
// 定义一个接收额外参数的装饰器工厂函数
function logWithMessage(message: string) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`调用方法 ${propertyKey} 前,额外信息: ${message}`);
const result = originalMethod.apply(this, args);
console.log(`调用方法 ${propertyKey} 后`);
return result;
};
return descriptor;
};
}
class MyClass {
@logWithMessage('这是一个额外的日志信息')
myMethod() {
console.log('执行 myMethod');
}
}
const myObj = new MyClass();
myObj.myMethod();
在上述代码中,logWithMessage
是一个装饰器工厂函数,它接收一个message
参数。返回的内部函数才是真正的方法装饰器,在这个装饰器中,利用传入的message
在方法调用前后打印日志。