Чтобы иметь произвольное количество вызовов, все из которых принимают число, необходимо, чтобы возвращаемое значение действовало как функция и в зависимости от числа. Так что:
const five = add(2)(3);
console.log(five(10)); // behaves like a function
console.log(five + 10); // behaves like a number
Я не могу придумать, как это сделать (или если есть веская причина, по которой должен сделать это), кроме того, что я бы назвал хаком.
С учетом вышесказанного, ради забавы, я смог сделать следующее, злоупотребив valueOf()
:
const add = (num1) => {
const func = (num2) => add(num1 + num2);
func.valueOf = () => num1;
return func;
}
console.log(add(1)(2)(3)); // *logs function* [output varies by environment]
console.log(add(1)(2)(3) + 10); // 16
console.log(add(1)(2) + 10); // 13
console.log(add(1) + 10); // 11
console.log(add(1)(2)(3) == 6); // true
console.log(add(1)(2)(3) === 6); // false
console.log(typeof add(1)(2)(3)); // function
console.log(typeof (add(1)(2) + 3)); // number
Но это, очевидно, не очень кошерный.
Редактировать: Переключено с использования toString()
на valueOf()
за комментарий @ PatrickRoberts .