더북(TheBook)

데코레이터 자체도 함수이므로 매개변수를 가질 수 있습니다. 다만 고차함수를 활용해야 합니다.

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');
  }

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.