
- 객체 선언
- const obj = { a: 1, b: 2 }
- 변수 obj를 재할당할 수 없음
- 객체 속성은 변경 가능
- 타입 단언(as const)
- const obj = { a: 1, b: 2 } as const
- 객체 전체를 읽기 전용(readonly) + 리터럴 타입으로 고정
- 객체 속성도 변경 불가
- let, var로 객체를 선언한 경우 객체 재할당 가능
const obj = { a: 1, b: 2 };
// 가능함!
obj.a = 3;
obj라는 변수 자체는 재할당할 수 없지만, 내부 속성은 변경 가능
타입스크립트는 obj를 { a: number; b: number }로 추론
const obj = { a: 1, b: 2 } as const;
// 에러! 읽기 전용 속성은 수정할 수 없음
obj.a = 3; // ❌ 에러 발생!
타입스크립트는 obj를 { readonly a: 1; readonly b: 2 }로 추론
즉, 값과 타입 둘 다 고정됨.
속성을 실수로 바꾸지 못하도록 막기 위해
"GET", "POST" 같은 문자열 리터럴을 유지하고 싶을 때
[1, 2, 3] as const → readonly [1, 2, 3]