본문 바로가기
언어/TypeScript

타입 추론

by seacode 2025. 4. 15.

타입 추론

  • 타입스크립트가 코드를 해석해나가는 동작
  • 기본적으로 변수 선언 및 초기화 시 타입 추론이 일어난다.
    • 변수, 속성, 인자 기본 값, 함수 반환값 등 설정 시에도 일어난다.
  • Best Common Type
    • 타입 추론 시, 몇 개의 코드를 바탕으로 추론하여 가장 근접한 타입으로 추론하게 된다.
    • let x = [1, 2, null] 같은 경우 숫자형, 널 이렇게 구분되고, 이 때 Best common type 알고리즘에 의해 가장 호환성 높은 타입으로 추론된다.
  • 타입 체킹에 있어, 타입스크립트는 값의 형태에 기반하여 판단한다.
    • Duck Typing
      • 객체 변수 및 메서드 집합이 객체의 타입을 결정한다. (동적 타이핑)
    • Structural Subtyping
      • 객체의 실제 구조나 정의에 따라 타입을 결정한다.

문백상의 타이핑

타입스크립트의 기본 추론 외에, 문맥상으로도 타입이 결정된다. 이는 코드의 위치를 기준으로 일어난다.

window.onmousedown = function(mouseEvent) {
  console.log(mouseEvent.button);   //<- OK
  console.log(mouseEvent.kangaroo); //<- Error!
};

위 코드의 타입 추론시, 타입 검사가 끝나고 나면 함수의 타입이 마우스 이벤트와 연관이 있다고 결정나므로, kangaroo 속성은 없다고 에러를 일으킨다.

window.onscroll = function(uiEvent) {
  console.log(uiEvent.button); //<- Error!
}

위 예시도 마찬가지. uiEvent 라서 버튼은 없다고 추론한다.

만약 본인의 의도가 저게 맞다면 아래와 같이 코드를 우회할 수 있다.

const handler = function(uiEvent) {
  console.log(uiEvent.button); //<- OK
}
  • 함수가 할당되는 변수만으로는 타입 추론이 힘드므로 에러가 나지 않는다.

'언어 > TypeScript' 카테고리의 다른 글

type vs interface  (0) 2025.04.16
타입 호환성  (0) 2025.04.15
제네릭(Generics)  (0) 2025.04.15
Class 특성  (0) 2025.04.14
Union Type, Intersection Type  (0) 2025.04.14