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

type StatefulSum = {
  (...nums: number[]): number;
  current: number;
  reset: (initialValue: number) => void;
};

export const statefulSum: StatefulSum = function (
  this: StatefulSum,
  ...nums: number[]
) {
  return (statefulSum.current = nums.reduce(
    (latestSum, num) => latestSum + num,
    statefulSum.current
  ));
};
statefulSum.current = 0;
statefulSum.reset = (initialValue: number = 0) =>
  (statefulSum.current = initialValue);

console.log("1 + 2 = ", statefulSum(1, 2));
console.log("3 + 3 + 4 = ", statefulSum(3, 4));

console.log("Current sum: ", statefulSum.current);

console.log("Reset sum");
statefulSum.reset();

console.log("3 + 4 = ", statefulSum(3, 4));

console.log("Reset sum to 5");
statefulSum.reset(5);
console.log("5 + 3 + 4 = ", statefulSum(3, 4));
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.