값이 변하지 않는 것이 확실하다면 as const라는 특별한 접미사(suffix)를 붙이면 됩니다.
const obj = { name: 'zero' } as const;
// const obj: { readonly name: 'zero' }
const arr = [1, 3, 'five'] as const;
// const arr: readonly [1, 3, 'five']
obj.name = 'nero';
// Cannot assign to 'name' because it is a read-only property.
arr.push(7);
// Property 'push' does not exist on type 'readonly [1, 3, "five"]'.
타입이 고정되어 추론되는 걸 볼 수 있습니다. obj의 속성 앞에 readonly라는 수식어(modifier)가 붙어 있습니다. arr 배열에도 readonly 수식어가 붙어 있고요. readonly 수식어가 붙으면 해당 값은 변경할 수 없습니다. 자바스크립트라면 문제가 없을 객체와 배열의 변경 작업이지만, 타입스크립트에서는 에러가 발생합니다. 자바스크립트에서는 실수로 객체를 변경해서 에러가 발생하는 일이 종종 있었는데 타입스크립트에서는 이를 엄격하게 통제할 수 있습니다.