기본

Typescript에서는 타입 표기가 없는 경우 타입 정보를 제공하기 위해 타입을 추론합니다. 예를 들어, 이 코드에서

let x = 3;

변수 x 의 타입은 number 로 추론됩니다. 이러한 추론은 변수와 멤버를 초기화 하고, 매개 변수의 기본 값을 설정하며, 함수의 반환 타입을 결정할 때 발생합니다.

대부분의 경우에 타입 추론은 직관적입니다.

최적 공통 타입 (Best common type)

여러 표현식에서 타입 추론이 발생할 때, 해당 표현식의 타입을 사용하여 "최적 공통 타입"을 계산합니다.

let x = [0, 1, null];

위 예제의 x 타입을 추론 하려면 각 배열 요소들의 타입을 고려해야 합니다. 여기서 배열의 타입으로 고를 수 있는 두가지 후보가 있습니다.

numbernull 입니다.

<aside> 💡 튜플 타입으로는 추론되지 않는구나

</aside>

최적 공통 타입 알고리즘은 각 후보 타입을 고려하여 모든 후보 타입을 포함할 수 있는 타입을 선택합니다.

후보 타입들로부터 최적 공통 타입을 선택하기 때문에, 모든 후보 타입을 포함할 수 있는 상위 타입이 존재해도 후보 타입 중 상위 타입이 존재하지 않으면 선택할 수 없습니다. 예를 들어

let zoo = [new Rhino(), new Elephant(), new Snake()];

이상 적으로 zoo 의 타입이 Animal[] 로 추론 되길 원하지만, 배열 중 Animal 타입의 객체가 없기 때문에 그렇게 되지 않습니다.

추론 결과는 (Rhino | Elephant | Snake)[] 과 같은 유니언 배열 타입입니다.