Recipes
›
Chapter 11: Classes
Writing Decorators
Recipe 11.9 from
The TypeScript Cookbook
function logMethod<This, Args extends any[], Return>(
value: (this: This, ...args: Args) => Return,
context: ClassMethodDecoratorContext
): (this: This, ...args: Args) => Return {
return function (this: This, ...args: Args) {
console.log(`calling ${context.name.toString()}`);
const val = value.call(this, ...args);
if (isPromise(val)) {
val.then((p: unknown) => {
console.log(`called ${context.name.toString()}: ${p}`);
return p;
});
} else {
console.log(`called ${context.name.toString()}: ${val}`);
}
return val;
};
}