const req = { url: "https://example.com", method: "GET" };
req.method = "XXX";
위의 코드는 유효합니다. req는 비록 상수 객체로 선언되어있지만 그 구성 프로퍼티들은 변경이 가능한 string 타입입니다. 하지만 이렇게 될 경우 문제가 있을 수 있습니다. 예를들어서 다음과 같은 함수가 있다고 해보겠습니다.
function requestURL(url: string, method: "GET" | "POST") {
// ..
}
requestURL(req.url, req.method);
requestURL 함수의 두번째 인자는 유니언 타입입니다. 그러나 req.method는 string 타입이구요. 즉, req.method는 언제든 GET이나 POST가 아닌 다른 문자열 값이 될 수 있습니다.
해결 방법은 as const를 사용하는 것입니다.
const req = { url: "https://example.com", method: "GET" } as const;
// req.method = "XXX"; -> ERROR
as const에 의해 req의 프로퍼티들은 더 이상 string이 아닌 리터릴 타입이 됩니다. 앞서 봤던 requestURL 함수 호출도 더 이상 문제가 되지 않습니다.
