TypeScript const assertion
상수를 쉽게 관리하고 가독성을 높이기 위해 제공하는 타입스크립트 기능이다. 타입 추론의 범위를 좁히거나 서로 연관된 상수들을 하나의 네임스페이스로 관리해야 할 경우 유용하게 사용 가능하다. 그동안 무지성으로 as 키워드를 붙여 사용하곤 했었는데 이번 기회에 확실히 이해하게 되었다!
리터럴 타입
리터럴 타입이란 변하지 않는 데이터를 의미한다. 타입스크립트는 원시 타입(string, number 등) 외에 특정 값을 타입으로 지정할 수 있다.
변수 let을 선언 후 문자열을 할당하면 타입스크립트는 string이라는 문자열로 타입을 추론한다.
리터럴을 이용해 타입 지정 후 지정한 타입의 다른 값을 입력할 경우 컴파일 에러가 발생한다. 원인은 let은 재할당이 가능하므로 값이 변경될 수 있어서다.
const assertion
const에 객체를 할당할 경우 let과 마찬가지로 원시 타입으로 추론이 되는데 이유는 일반적으로 객체의 속성과 값은 언제든지 바뀔 수 있어서다.
const computer = {
monitor: "삼성",
keyboard: "레이저",
mouse: "로지텍",
};
computer.monitor = "엘지";
이러한 문제점을 개선하기 위해 타입스크립트 3.4 버전부터 const assertion 기능이 추가되었다. 사용법은 as const 키워드를 할당 마지막 부분에 붙여준다. 리터럴 타입으로 추론되어 readonly 즉 속성과 값 변경이 불가능해진다.
다음은 예시로 assertion 기능을 사용해 응답 코드를 나타내는 객체이다.
assertion에 const를 붙여 간단하게 사용할 수도 있지만 다음과 같이 interface를 이용해 타입을 지정하거나 assertion에 interface를 줌으로써 같은 효과를 낼 수 있다. interface를 사용할 경우 별도로 타이핑해 줘야 하는 번거로움이 있으며 재사용할 일이 없을 경우 const를 사용하는 게 더 좋을 거 같다.
참고 자료
https://velog.io/@logqwerty/Enum-vs-as-const
https://www.typescriptlang.org/docs/handbook/enums.html
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html
'언어 > 타입스크립트' 카테고리의 다른 글
TypeScript any unknown (0) | 2022.11.12 |
---|---|
TypeScript 사용 이유와 컴파일 과정 (0) | 2022.11.03 |
TypeScript 유틸리티 타입 (0) | 2022.05.29 |
TypeScript 타입 가드 (0) | 2022.05.28 |
TypeScript 제네릭 (0) | 2022.05.24 |