타입스크립트에서 아래 사진처럼 타입을 object로 지정하면, user.id처럼 속성을 불러올 수 없다.
typescript에서 object는 그냥 객체라는 것을 의미하는 그 이상도 이하도 아니기 때문이다.

하지만 우리가 원하는 것은 object의 속성을 불러오는 것이므로,
아래 코드처럼 객체의 모든 property들의 타입까지 정의할 수 있는 방식 (객체 리터럴 타입)을 사용한다.


타입스크립트에서는 단순히 object 같은 단순한 이름 선언으로 정의하는 것이 아니라 타입 구조를 기준으로 타입을 정의한다.
: 타입 구조를 기준으로 타입을 정의 ex.TS
: 이름을 기준으로 타입을 정의 ex.JS

위 코드처럼 name 은 있지만 id는 없는 객체를 추가하는 경우가 있다면, id 속성을 선택적으로 설정해주면 된다.

위 코드처럼 property 이름 뒤에 ?(물음표)를 추가해주면 선택적 property가 된다.
속성?: 타입로 정의해준다.
ex.
id?: number
id 속성의 value는 있어도 되고, 없어도 되지만, 만약 있다면 그 값의 type은 number여야 한다.

위 코드처럼 변경되면 안되는 property의 경우 (값을 불러오는 것만 가능한 경우), 아래 코드처럼 readonly를 사용해주면 읽기만 가능하다.
