add2, add3, add4도 이런 식으로 인수의 개수를 줄일 수 있습니다. add2는 인수를 3개까지 받을 수 있고, add3는 2개, add4는 1개까지만 가능합니다. 그런데 add5의 경우는 다릅니다. 규칙대로라면 add5는 0개의 인수를 받아야 하는데 다음 코드처럼 인수를 받아도 에러가 발생하지 않습니다.
...
const add2 = add.bind(null, 1, 2);
add2(3, 4, 5);
const add3 = add.bind(null, 1, 2, 3);
add3(4, 5);
const add4 = add.bind(null, 1, 2, 3, 4);
add4(5);
const add5 = add.bind(null, 1, 2, 3, 4, 5);
add5(5);
에러가 발생하지 않는 이유는, add5에서는 bind의 타입이 다르기 때문입니다.
interface CallableFunction extends Function {
(...)
bind<T, AX, R>(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R;
(...)
}