TypeScript에서 this의 타입은 함수 시그니처에서 명시적으로 지정할 수 있습니다. 이는 객체 및 클래스의 메서드에서 호출 컨텍스트의 올바른 타입 지정을 보장하기 위해 사용됩니다.
this의 타입을 지정하는 예시:
interface Person { name: string; greet(this: Person): void; } const person: Person = { name: 'Max', greet() { console.log(`Hello, ${this.name}!`); } };
함수의 경우 this 타입을 명시적으로 지정할 수 있습니다 — 이 경우 첫 번째로 명명되지 않은 매개변수로 들어갑니다:
function showName(this: { name: string }) { console.log(this.name); }
화살표 함수의 특징:
그 필요성은 무엇인가요? 객체 메서드를 잘못 사용할 때 오류를 잡을 수 있게 해주며, 실시간 "바인딩"을 보장하는 데 도움을 줍니다 (예: 이벤트 핸들러에서).
화살표 함수에서 this의 타입을 명시적으로 지정할 수 있나요? 함정은 무엇인가요?
답변: 불가능합니다. 화살표 함수는 외부 컨텍스트에서 this를 캡처하며, ECMAScript 명세는 그 내부에서 this의 고유한 값을 가질 수 없도록 되어 있습니다.
const foo = (this: any) => {} // 컴파일 오류
this를 제어해야 할 경우 — 일반 함수(function)를 사용하십시오.
이야기
이야기
setTimeout(obj.method, 1000)) this가 소실되어 런타임 오류가 발생했습니다. bind 또는 화살표 함수를 통해 컨텍스트를 고정하는 것을 잊었습니다.이야기
데이터 모델 작업을 위한 라이브러리에서 인터페이스 메서드의 this 타입을 지정하는 것을 잊었습니다. TypeScript는 잘못된 컨텍스트에서 메서드를 호출할 때 오류를 표시하지 않았지만, production에서는 존재하지 않는 속성에 접근할 때 애플리케이션이 중단되었습니다.