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