명시적으로 타입을 지정하지 않아도 타입스크립트가 코드를 해석해서 적절한 타입을 자동으로 정의한다.
any 타입으로 추론된다.any 타입으로 추론된 이후에 값을 할당해도 타입은 변경되지 않고 여전히 any 타입이다.(() => {
// 기본 데이터 타입의 변수 타입을 추론에 의지(권장)
let name = "이일구"; // string으로 타입 추론
// name = 219;
const age = 20; // number로 타입 추론
let name2; // any로 타입 추론
name2 = "이일구";
name2 = 219;
console.log(name, age, name2);
})();
객체를 선언과 동시에 초기화할 때 타입을 명시하지 않으면 객체 내부의 속성과 속성값에 맞춰서 타입을 자동으로 정의한다.
string 타입number 타입(() => {
// 객체가 초기화 될 때 속성값에 맞춰서 타입 추론
// const todo1 = {
// id: 12, // FIXME id의 타입을 string, number 둘 다 가능하게 하고 싶음
// title: "타입 추론",
// content: "타입스크립트가 코드를 분석해서 적절한 타입을 자동으로 지정",
// };
// todo1.done = true;
// todo1.id = "12";
interface Todo {
id: string | number;
title: string;
content: string;
}
const todo2: Todo = {
id: 13,
title: "할일 13",
content: "내용 13",
};
todo2.id = "13";
})();
any 타입이 된다.? (옵셔널 매개변수)를 추가한다.(() => {
// 매개변수의 타입을 지정하지 않으면 num은 암묵적으로 any 타입이 됨.
function add10(num: number) {
return num + 10;
}
const result = add10(99.8756);
console.log(result.toFixed(1));
// 타입을 생략하고 기본값을 지정하면 기본값의 타입을 따라가도록 타입 추론하고 옵셔널 매개변수(?) 추가
// 리턴 타입을 생략하면 리턴값의 타입을 따라가도록 타입 추론(number + 20 = number)
function add20(num = 0) {
return num + 20;
}
const result2 = add20(100.12345);
console.log(result2.toFixed(2));
})();