const {a,b,c} = s
const arr = {a:1, b:2}
const arr2 = arr
참조값에 의한 전달이 일어나서 복사본에 대해서 수정하면 원본 객체도 같이 수정됨
const arr = {a:1, b:2}
const arr2 = {c:3, d:4}
const arr3 = {...arr1, ... arr2}
이렇게 전개연산자 방식으로 전달해주면 트랜스파일 된 파일의 크기가 매우 커진다.
객체 초기자를 사용해주면 간편하게 객체에 선언할 수 있게 된다.
js 는 동적 타입 언어 이기 때문에 런타임 에서 타입이 지정되어서 코드 실행해야만 에러 알아낼 수 있어서 ts 같은 정적 타입 언어에 비해 디버깅이 어렵다. (js 에서 typeof 를 통해 타입에 대해 검증하기도 어렵다)
이런 한계를 극복하기 위해 런타임에서 타입을 검증하는 것이 아닌 빌드 타임에서 검증할 수 있는 TS 가 도입
any 대신 unknown 을 최대한 써보자. (unknown 은 모든 값을 할당할 수 있는 top type 으로 타입을 단정할 수 없을때) <-> never 은 unknwon 과는 반대로 어떤 타입에 대해서도 들어올 수 없을 떄
instance of ,type of 특정 인스턴스 나 타입 임을 확인할 수 있다. (타입을 좁혀서 확인하는 타입가드로서 로직에 대해 명확하게 표현)
in 을 사용해서 객체 내에 키가 존재하는지 확인하기 위해 쓰인다.
generic 키워드를 선언해 다양한 타입에 대해서 처리할 수 있도록 함(타입의 일반화)
객체의 키 에 대한 타입을 선언해줄 때에는 [key:string] 로 선언하게 된다.
Object.keys(hello) 에 대한 타입을 유추하게 되면 객체의 key 값에 대한 타입이 아닌 string 으로 나옴. 이렇게 되면 인덱스를 통해 접근했을 때 타입이 맞지 않다고 나옴 -> as 를 통해 타입 캐스팅을 하여 Array<keyof Hello> 로 타입 단언하는 부분이 필요함.