타입스크립트 5.1 출시 bind 함수 변경점

bind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;

bind<T, A extends any[], B extends any[], R>(this: (this: T, ...args: [...A, ...B]) => R, thisArg: T, ...args: A): (...args: B) => R;

 

bind 함수가 간단해졌습니다. [...A, ...B]가 헷갈리실텐데요. A는 기존 함수에 bind할 인수들이고, B는 bind하지 않은 인수들이라고 생각하시면 됩니다. 즉, 원래 함수는 A, B를 모두 매개변수로 갖고 있었다면, 새롭게 bind한 함수에서는 B만 더 필요하게 된 것입니다.

const sum = (a1, a2, b1, b2) => a1 + a2 + b1 + b2;
const sum1 = sum.bind(null, 1, 2); // a1에 1, a2에 2를 bind
sum1(3, 4); // 1 + 2 + 3 + 4 === 3, a1, a2는 이미 bind되었으므로 남은 b1, b2만 제공

기존에는 다음과 같았습니다.

bind<T, A0, A extends any[], R>(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R;
bind<T, A0, A1, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1): (...args: A) => R;
bind<T, A0, A1, A2, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2): (...args: A) => R;
bind<T, A0, A1, A2, A3, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3): (...args: A) => R;
bind<T, AX, R>(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R;

채널톡 아이콘