221028 TIL | 이펙티브 타입스크립트_#8 변경 관련된 오류 방지를 위해 readonly 사용하기

아이템17까지 학습

  • 아이템 17 : 변경 관련된 오류 방지를 위해 readonly 사용하기

readonly

  • 함수가 매개변수를 수정하지 않는다면 readonly 속성을 사용한다.
    • readonly는 인터페이스를 명확하게 하며 매개변수가 변경되는 것을 방지하기 때문이다.
  • readonly를 사용하면 변경하면서 발생하는 오류를 방지할 수 있고 변경이 발생하는 코드도 쉽게 찾을 수 있다.
  • readonly는 얕게 동작한다.
    • 만약 객체의 readonly 배열이 있다면 그 객체 자체는 readonly가 아니다.
      const dates: readonly Date[] = [new Date()];
      dates.push(new Date());
         // ~~~~ 'readonly Date[]' 형식에 'push' 속성이 없습니다.
      dates[0].setFullYear(2037);  // OK
    

Readonly

  • 타입 매핑을 이용하여 T 타입을 받고 모든 속성을 readonly로 지정하는 제네릭 타입이다.
interface Outer {
  inner: {
    x: number;
  }
}
const o: Readonly<Outer> = { inner: { x: 0 }};
o.inner = { x: 1 };
// ~~~~ 읽기 전용 속성이기 때문에 'inner'에 할당할 수 없습니다.
o.inner.x = 1;  // OK

출처

  • 이펙티브 타입스크립트