클래스 A에는 세 메서드 eat, work, sleap이 있는데 start를 로깅하는 console.log와 end를 로깅하는 console.log가 중복됩니다. 이렇게 중복이 있는 경우 다음과 같이 데코레이터를 사용하여 중복을 제거할 수 있습니다.
function startAndEnd(originalMethod: any, context: any) {
function replacementMethod(this: any, ...args: any[]) {
console.log('start');
const result = originalMethod.call(this, ...args);
console.log('end');
return result;
}
return replacementMethod;
}
class A {
@startAndEnd
eat() {
console.log('Eat');
}
@startAndEnd
work() {
console.log('Work');
}
@startAndEnd
sleap() {
console.log('Sleap');
}
}