타입추론이란?
- 타입스크립트는 타입이 정의되어 있지 않은 변수의 타입을 자동으로 추론합니다.
- 일반적인 변수 선언의 경우 초기값을 기준으로 타입이 잘 추론됩니다.
- 함수는 return문 뒤에 오는 반환문을 기준으로 타입을 추론한다.
- 변수를 선언할때 초기값을 생략하면 암시적인 any 타입으로 추론됩니다.
- 암시적으로 추론된 any 타입은 코드의 흐름에 따라 타입이 계속 변화합니다.
- 이런것을 'any 타입의 진화'라고 한다.
let d;
//초기값을 생략하고 변수를 선언하면 처음에는 any 타입을 넣어준다.
d = 10;
//d에 값을 할당했을시 그 값의 타입값인 number 타입이 된다.
d.toFixed();
// d.toUpperCase(); (오류 발생)
//현재 d의 타입은 number이여서 number 메서드는 사용가능하지만
//string 메서드는 사용 안된다.
d = "hello";
//d에 새로운 값을 할당했을시 그 값의 타입값이 된다.
d.toUpperCase();
// d.toFixed(); // 오류 발생
- 상수는 초기화 때 설정한 값을 변경할 수 없기 때문에 특별히 가장 좁은 타입으로 추론됩니다.
let num1 =10; // number 타입으로 추론
const num = 10; // 10 Number Literal 타입으로 추론
let str1 = "hello"; //string 타입으로 추론
const str = "hello" //"hello" String Literal 타입으로 추론
- const로 선언한 것이 아니라면 ts는 타입을 넓혀서 범용적으로 타입을 추론한다.
- 다양한 타입의 요소를 담은 배열을 변수의 초기값으로 설정하면, 최적의 공통 타입으로 추론
let arr = [1, "string"] // (string | number)[] 타입으로 추론