데코레이터 자체도 함수이므로 매개변수를 가질 수 있습니다. 다만 고차함수를 활용해야 합니다.
function startAndEnd(start = 'start', end = 'end') {
return function RealDecorator<This, Args extends any[], Return>(
originalMethod: (this: This, ...args: Args) => Return,
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>
) {
function replacementMethod(this: This, ...args: Args): Return {
console.log(context.name, start);
const result = originalMethod.call(this, ...args);
console.log(context.name, end);
return result;
}
return replacementMethod;
}
}
class A {
@startAndEnd()
eat() {
console.log('Eat');
}