더북(TheBook)

ThisParameterType<T>T가 함수이면, thisinfer해서 가져오고, infer할 수 없다면 unknown이 되는 타입입니다. OmitThisParameter<T> 타입은 ThisParameterTypeunknown이면 T가 되고, T(...args: infer A) => infer R 꼴의 함수이면 (...args: A) => R 꼴의 함수가 됩니다. 함수의 타입이 똑같아 보이나요? 하지만 ThisParameterType<T>unknown이 아니라는 것은 함수에 this 타입이 존재한다는 뜻입니다. OmitThisParameter의 함수는 기존 함수에서 this 타입을 제거한 함수입니다.

this를 제거해야 하는 이유는 다음 코드에서 확인할 수 있습니다.

interface CallableFunction {
  myBind<T>(this: T, thisArg: ThisParameterType<T>): T;
}
function myAdd(this: number, a = 0, b = 0) {
  return this + a + b;
}
const myAdd0 = myAdd.myBind(5);
// const myAdd0: (this: number, a?: number, b?: number) => number
myAdd0(3, 4);
// The 'this' context of type 'void' is not assignable to method's 'this' of type 'number'.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.