타입 추론이란 할당된 데이터의 타입을 타입스크립트가 추론하는 것을 의미한다.
변수 a
를 할당없이 선언만 하게 되면 a
의 타입은 any(모든 타입이 될 수 있는 상태)가 된다.
숫자를 할당하게 되면 타입은 number가 되고,
문자열을 할당하게 되면 타입은 string이 된다.
함수의 파라미터와 리턴값의 타입에 대해서도 자동으로 추론이 이루어진다.
변수에 인터페이스와 제네릭의 타입을 지정하면 변수를 할당할 때 그에 맞는 타입이 추론되며, 타입에 맞게 할당하지 않으면 에러가 난다.
타입스크립트는 표현식을 이용하여 가장 근접한 타입을 추론하게 되는데 이 가장 근접한 타입을 Best Common Type이라고 한다.
Animal
이라는 빈 클래스와 이를 상속하여 Rhino
, Elephant
, Snake
라는 클래스를 만들어보자. 그리고 이 클래스들을 zoo
라는 배열로 만들어보자.
class Animal {}
class Rhino extends Animal {
hasHorn: true;
}
class Elephant extends Animal {
hasTrunk: true;
}
class Snake extends Animal {
hasLegs: false;
}
let zoo = [new Rhino(), new Elephant(), new Snake()];
이상적으로는, zoo 가 Animal[]
타입으로 추론되기를 원할 수 있지만, 배열 안에 Animal 타입의 객체가 없다면, 엄격하게 판단하여 Animal[]
타입으로 추론하지 않는다. 최적 공통 타입이 발견되지 않으면, 추론 결과는 유니언 배열 타입 (Rhino | Elephant | Snake)[]
이다.
이를 수정하려면 유형을 명시적으로 제공해야 한다.