타입스크립트는 변수에 타입을 지정하지 않으면 초기화 값을 기준으로 변수 타입을 추론합니다.
이를 타입 추론 이라고 합니다.
let a = 10;
// number 타입으로 추론
하지만 모든 상황에서 타입 추론이 가능한 것은 아닙니다.
변수 선언 시 초기값을 기준으로 변수 타입을 추론합니다.
let a = 10;
// number 타입으로 추론
let b = "hello";
// string 타입으로 추론
let c = {
id: 1,
name: "정민교",
profile: {
nickname: "...",
},
urls: ["https://..."],
};
// id, name, profile, urls 프로퍼티가 있는 객체 타입으로 추론
다양한 타입의 요소를 담은 배열을 초기값으로 설정하면 최적의 공통타입으로 추론합니다.
let arr = [1, "string"];
// (string | number)[] 타입으로 추론
const
로 선언한 상수는 대입한 리터럴 값으로 타입이 추론됩니다.
const num = 10;
// 10 Number Literal 타입으로 추론
const str = "hello";
// "hello" String Literal 타입으로 추론
let arr = [1, "string"];
// (string | number)[] 타입으로 추론
객체와 배열 구조분해 할당 시에도 정상적으로 타입 추론이 동작합니다.
let { id, name, profile } = c;
let [one, two, three] = [1, "hello", true];
return
문 기준으로 함수 반환값의 타입을 추론합니다.
function func() {
return "hello";
}
// 반환값이 string 타입으로 추론된다
기본값이 설정된 매개변수는 기본값 기준으로 타입이 추론됩니다.
function func(message = "hello") {
return "hello";
}
변수를 선언할 때 초기화를 진행하지 않고 선언만 한다면 이 변수는 암묵적으로 any
타입으로 추론됩니다.
let d;
// 암시적인 any 타입으로 추론
재미있는 점은 이렇게 암묵적으로 any
타입으로 추론된 변수는 값을 할당할 때마다 값의 타입이 변화한다는 점입니다.
let d;
d = 10; // number 타입
d.toFixed();
d = "hello"; // string 타입
d.toUpperCase();
d.toFixed(); // 오류