let obj1: object = {
a: 1,
};
obj1.a; //'object'형식에 'a'속성이 없습니다
//중괄호 안에서 타입 명시하기
let obj2: { a: number } = {
a: 1,
};
obj2.a; //(property) a:number
//TS가 타입을 추론하게 하기
let obj3 = {
a: 1,
};
obj3.a; //(property) a:number
//a 속성은 생략 가능
//인덱스 시그니처 예시 : 이 객체에서 모든 number타입 키는 string타입의 값을 가진다.
//key의 이름은 임의로 지정 가능하며, number, string에 할당할 수 있는 타입이어야 한다.
let obj4: { a?: number; [key: number]: string };
obj4 = { a: 10, 1: "one" };
obj4 = { 1: 12 }; //"number"형식은 "string"형식에 할당할 수 없습니다.
//읽기전용 필드
let obj5: { readonly num: number } = {
num: 100,
};
obj5.num = 200; //읽기 전용 속성이므로 'num'에 할당할 수 없습니다.
const obj6: {} = {toString(){return 1}}
const obj7: Object = {toString(){return 1}} //'() => number' 형식은 '() => string' 형식에 할당할 수 없습니다.
출처
보리스 체르니, 타입스크립트 프로그래밍(2021)