Suppose you have a function, written in TypeScript, that is fine and complete. Now you want to write a function that works like that one but with just some slightly more parameters and other differences. It's not too different from a decorator function.
Extending the list of parameters
Let's imagine that you already have this function:
type Operation = "sum" | "sub" | "mul" | "div"
function calculator(a: number, b: number, op: Operation) {
if (op === "sum") return a + b
if (op === "sub") return a - b
if (op === "mul") return a * b
if (op === "div") return a / b
throw new Error(op)
}
And this could, for the sake of argument, be in a different file and/or possibly outside your control. What you now want to do is write a new function that takes those same arguments, plus one more. And importantly, you don't want to have to spell out all the arguments one more time.
First, the WRONG way to solve this:
import { calculator } from './calculator'
type Operation = "sum" | "sub" | "mul" | "div"
function doubleCalculator(a: number, b: number, op: Operation, c: number) {
return calculator(calculator(a, b, op), c, op)
}
console.log(calculator(1, 2, "sum"))
console.log(doubleCalculator(1, 2, "sum", 10))
Technically, it works, but you had to repeat the calculator
function's signature.
Truncated! Read the rest by clicking the link below.