타입 추론이란 TypeScript에서 명시적인 타입 표기가 없을 때, 타입 정보를 제공하기 위해 사용된다.
쉽게 말하면 자동으로 타입을 결정해주는 것이다.
변수를 선언하거나 초기화할 때, 변수, 속성, 인자의 기본 값, 함수의 반환 값 등을 설정할 때 타입 추론이 일어난다.
let x = 3; // let x: number
let y = "5"; // let y: string
이렇게 작성하면 typescript는 자동적으로 타입을 추론하여 알맞은 타입을 결정한다.
여러 타입을 동시에 사용할 경우, 최적의 공통 타입을 자동으로 계산해준다.
let arr = [0, 1, null]; // let arr: (number | null)[]
또한, 문맥을 체크하여 타입을 결정짓기도 한다.
// window.onmousedown 타입 검사 후, 함수 타입이 마우스 이벤트와 연관있다고 추론
// 따라서, mouseEvent에 button 속성이 있다고 결론 내림
window.onmousedown = function(mouseEvent) {
console.log(mouseEvent.button); // OK
};
// window.onscroll 타입 검사 후, button 속성이 없다고 추론하므로 에러 발생
window.onscroll = function(uiEvent) {
console.log(uiEvent.button); // Error
}
타입 체크는 값의 형태에 기반하여 이루어져야 한다.
이를 Duck Typing 또는 Structural Subtyping 이라고 한다.
Duck Typing
: 객체의 변수 및 메서드 집합이 객체 타입을 결정 (동적 타이핑의 한 종류)Structural Subtyping
: 객체의 실제 구조나 정의에 따라 타입을 결정