[[[https://codepen.io/rene-link/pen/bGooLWy]]]
import "https://codepen.io/rene-link/pen/dyzBMoW.js";

const traceLog = <
  F extends (...args: any[]) => any,
  P extends Parameters<F>,
  R extends ReturnType<F>
>(
  fn: F,
  fnName = fn.name
): ((...args: P) => R) => {
  return (...args) => {
    console.log(`Calling ${fnName} with args`, args);
    const result = fn(...args);
    console.log(`Result of ${fnName} is`, result);
    return result;
  };
};

function sum(num1: number, num2: number): number {
  return num1 + num2;
}

const sumWithTrace = traceLog(sum);

console.log(sumWithTrace(3,5));
View Compiled
Run Pen

External CSS

  1. https://codepen.io/rene-link/pen/bGooLWy.css

External JavaScript

This Pen doesn't use any external JavaScript resources.