← Back to NOTES 🌰 ← Back to Effective TypeScript
← 아이템 17 - 변경 관련된 오류 방지를 위해 readonly 사용하기
함수가 매개변수를 수정하지 않는다면 readonly로 선언하는 것이 좋다. readonly 매개변수는 인터페이스를 명확하게 하며, 매개변수가 변경되는 것을 방지하여 변경으로 인한 오류를 쉽게 찾을 수 있다. 하지만 readonly는 얕게(shallow) 동작하므로 깊은 readonly가 필요한 경우 라이브러리를 사용하거나 직접 구현해야 한다.
number[]는 readonly number[]보다 기능이 많으므로, readonly number[]의 서브타입이다. 따라서 변경 가능한 배열을 readonly 배열에 할당할 수 있지만, 그 반대는 불가능하다.
호출하는 다른 함수도 readonly로 만들어야 할 수 있다. 하지만 이는 인터페이스를 명확히 하고 타입 안정성을 높이므로 꼭 단점이라고 볼 순 없다.
readonly는 얕게(shallow) 동작하므로, 객체의 readonly 배열이 있다면 객체 자체는 변경될 수 있다. 깊은(deep) readonly가 필요하면 ts-essentials의 DeepReadonly 같은 라이브러리를 사용한다.