타입을 집합으로 생각하자. (유니언, 인터섹션)
<aside> 🚨 타입스크립트가 타입을 제대로 추론하면 그대로 쓰고, 틀리게 추론할 때만 올바른 타입을 표기하자.
</aside>
const
로 변수를 선언할때와 let
으로 선언할때의 타입 추론을 다르게 한다.const str = 'hello'; // 'hello' 타입
let str2 = 'ko'; // string 타입
symbol
도 나오는데 이거는 넘어가자. const로 선언한 symbol과 let으로 선언한 symbol은 다르다.const obj = { hello : 'world' }; // {hello : string}
let obj = { hello : 'world' }; // {hello : string}
const
일때나 let
일때나 객체의 속성은 변경할 수 있기 때문에 ⇒ 위의 예시에서 타입스크립트가 string
으로 추론.let
에 처음 선언한 변수의 타입과 다른 자료형을 대입하는 경우는 없다.객체
는 const로 선언하더라도 언제든지 수정할 수 있기때문에 타입스크립트가 넓게 타입을 추론한다. ⇒ 리터럴로 명시하지 않는이상.const obj = {name : 'zero'} as const // const obj : {readonly name : 'zero'}
obj
인데 name
프로퍼티에는 꼭 zero
여야만해 너 다른것으로 프로퍼티 값을 바꿀 수 없어.