객체 계약

객체의 모양을 계약으로 고정하기

객체 리터럴 타입은 즉석 구조를 빠르게 고정하고, interface는 같은 구조를 이름 있는 협업 계약으로 재사용하게 한다.

객체 리터럴 타입

local shape

한 번 쓰는 값이나 가까운 범위의 변수에 직접 구조를 붙일 때 적합하다.

let user: {
  name: string;
  age?: number;
};

interface

shared contract

여러 객체와 함수가 같은 모양을 공유하면 이름 있는 계약으로 분리한다.

interface User {
  readonly id: string;
  name: string;
}

속성 규칙을 읽는 순서

property contract
?

선택적 속성

누락 가능성을 타입에 드러내고, 사용할 때 undefined를 함께 고려한다.

readonly

읽기 전용

식별자나 외부에서 바꾸면 안 되는 값을 생성 시점 이후 고정한다.

[key]

인덱스 시그니처

키 이름은 유동적이지만, 모든 값의 타입은 같은 규칙으로 제한한다.

extends 흐름

reuse shape
Shape Circle radius 사용

공통 속성은 부모 인터페이스에 두고, 구체 타입은 필요한 속성만 덧붙여 계약을 작게 유지한다.

1

필수 속성

누락되면 안 되는 값은 ? 없이 둔다.

2

값 타입

문자열, 숫자, 불리언이 예제와 맞는지 본다.

3

수정 가능성

바뀌면 안 되는 값에는 readonly를 붙인다.

4

공유 범위

반복되는 구조는 interface 이름으로 합의한다.