Published on

객체

객체

타입스크립트에서는 객체를 2가지 방식으로 정의할 수 있습니다.

object로 정의하기

let user = {
  id: 1,
  name: '홍길동',
}

하나의 객체를 생성한 후 타입으로 object를 정의합니다.

let user: object = {
  id: 1,
  name: '홍길동',
}

하지만 user.id;를 하게되면은 오류가 발생합니다.
그 이유는 타입스크립트의 object 타입은 단순 값이 객체임을 표현하는 것 외에는 아무런 정보도 제공하지 않는 타입이기 때문입니다.
따라서 이 타입은 객체의 프로퍼티에 대한 정보를 전혀 가지고 있지 않습니다.
그렇기 때문에 이렇게 프로퍼티에 접근하려고 하면 오류가 발생합니다.

이럴 때에는 object가 아닌 리터럴 타입을 사용합니다.

let user: { id: number; name: string } = {
  id: 1,
  name: '홍길동',
}

또한 ? 를 사용하게되면은 강제로 사용하는것이 아니라 사용할 수 있고, 안할 수 있습니다.

let user: { id?: number; name: string } = {
  id: 1,
  name: '홍길동',
}

이렇게 되면은 id는 강제로 적지 않아도됩니다.

읽기전용

let user: {
  id?: number
  readonly name: string // name은 이제 Readonly 프로퍼티가 되었음
} = {
  id: 1,
  name: '홍길동',
}

user.name = 'dskfd' // 오류 발생

특정 프로퍼티를 읽기 전용으로 만들고 싶다면 다음과 같이 프로퍼티의 이름 앞에 readonly 키워드를 붙이면 됩니다.
name 프로퍼티는 이제 읽기 전용 프로퍼티가 되었기 때문에 마지막 라인처럼 프로퍼티의 값을 수정하려고 하면 오류가 발생하게 됩니다.
이를 통해 의도치 않은 프로퍼티의 수정을 방지할 수 있습니다.