[[[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
This Pen doesn't use any external JavaScript resources.