객체 정의하기
let user: object = {
id: 1,
name: "이정환",
};
user.id;
위 코드의 user.id 처럼 점 표기법으로 객체의 특정 프로퍼티에 접근하려고 하면 오류가 발생
타입스크립트의 object 타입은 단순 값이 객체임을 표현하는 것 외에는 아무런 정보도 제공하지 않는 타입이기 때문
따라서 이 타입은 객체의 프로퍼티에 대한 정보를 전혀 가지고 있지 않는다.
이럴 때에는 object가 아닌 객체 리터럴 타입을 이용해야 한다.
객체 리터럴 타입
let user: {
id: number;
name: string;
} = {
id: 1,
name: "이정환",
};
user.id;
변수 user의 타입을
number 타입의 id 그리고 string 타입의 name 프로퍼티를 갖는 객체 타입으로 정의했다.
구조를 기준으로 정의해서
구조적 타입 시스템이라고 한다.
-> 프로퍼티를 기준으로, 프로퍼티들이 있어야 하는지 정의하는 방식으로 객체의 타입을 정의
선택적 프로퍼티(Optional Property)
: 특정 프로퍼티는 있어도 되고 없어도 되는 상황에서 사용
프로퍼티의 이름 뒤에 ? 를 붙여주면 된다.
// object
let user: {
id?: number;
name: string;
} = {
id: 1,
name: "이정환",
};
user = {
name: "홍길동",
};
읽기전용 프로퍼티(Readonly Property)
: 특정 프로퍼티를 읽기 전용으로 만들고 싶다면 다음과 같이 프로퍼티의 이름 앞에 readonly 키워드를 붙이면 된다.
let config: {
readonly apiKey: string;
} = {
apiKey: "MY API KEY",
}
config.apiKey = "hacked"; // 에러. 수정 불가