프로퍼티나 배열의 요소가 변경되지 않도록 함.
const arr: readonly number[] = [1, 2, 3];
arr[0] = 4;
arr.push(5);
readonly로 배열을 선언하면 push가 아예 없다는 에러가 나온다.
'readonly number[]' 형식에 'push' 속성이 없습니다.ts(2339)
readonly는 얕게 동작한다.
즉, 최상위 수준의 속성들은 변경 불가능하지만 그 요소가 참조하는 다른 객체의 내부 상태는 변경할 수 있다.
const와 readonly 차이는?
매핑된 타입: 기존 타입을 바탕으로 새로운 타입을 만들어내는 기능
예)
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = {
readonly [K in keyof Person]: Person[K];
};
const person: ReadonlyPerson = {
name: "John",
age: 30
};
person.name = "Jane"; // 오류: name은 읽기 전용 속성이므로 할당할 수 없습니다.