아이템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
출처
- 이펙티브 타입스크립트