shape와 contract

객체와 인터페이스 설계표

객체 타입은 값의 모양을 기록하고, 인터페이스는 반복해서 공유되는 객체 계약을 이름 붙여 확장합니다.

객체 리터럴

즉석 shape 정의

한 곳에서만 쓰는 값 구조는 객체 리터럴 타입으로 표현해 별도 이름을 늘리지 않습니다.

{ name: string }
선택 속성

있을 수도 있는 값

물음표를 붙인 속성은 접근 전에 undefined 가능성을 고려해야 합니다.

email?: string
읽기 전용

변경 금지 의도

readonly는 객체 생성 뒤 바꾸면 안 되는 식별자나 설정값에 어울립니다.

readonly id: string
인터페이스

확장 가능한 계약

여러 함수와 클래스가 공유할 모양은 interface로 이름 붙여 사용합니다.

interface User
함수 타입 인터페이스 안에서도 호출 시그니처로 함수 형태를 표현할 수 있습니다.
동적 키 알 수 없는 키 집합은 인덱스 시그니처로 값 타입을 제한합니다.
확장 관계 extends로 공통 속성을 재사용하면 중복 선언을 줄입니다.

객체 타입을 잘 쓰려면 속성 이름뿐 아니라 누락, 변경, 확장 가능성까지 타입에 담아야 합니다.