인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

oppop156님의 프로필 이미지
oppop156

작성한 질문수

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

완전 복잡한 타입 분석하기(bind 편)

타입에서의 this 가 헷갈립니다

작성

·

191

0

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

위 타입에서 this가 두번 나오는데 서로 의미하는 바가 다른 것 같습니다.

두번째 this는 실제 함수에서 arguments로써 사용되는 this인 것 같은데

const Func(this:someThing) {}

첫번째 this가 의미하는바가 무엇인지 이해가 잘 안가네요..

 

그리고 OmitThisParamter 타입을 분석을 해보려고 하니 아래 부분 비교를 한다는 것은 T에 this arguments가 존재한다는 뜻으로 이해를 했는데 ...args 만으로 표기를하면 this까지 포함되는게 아닌건가요?

T extends (...args: infer A) => infer R

제 생각에는 다음과 같이 되어야 할 것 같은데 어떻게 this를 제외한건지 명확하게 이해가 안갑니다

T extends (this:unknown, ...args: infer A) => infer R

 

 

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

일단 bind 함수에서 쓰이는 this가 (this: T, arg0: A0, ...args: A) => R 함수인 것입니다. 그리고 그 this 함수에 대한 this가 T인 것입니다.

const a = b.bind(1, 2, 3);
a; // (this: T, arg0: A0, ...args: A) => R

...args로 표기하면 this는 포함되지 않습니다. js 문법상 ...args가 this를 포함하지 않기 때문입니다.

oppop156님의 프로필 이미지
oppop156

작성한 질문수

질문하기