리터럴 타입
Typescript 에서는 포괄적인 타입 (string, number, boolean) 외에도 정확한 값을 설정하는 것이 가능하다.
위 예제처럼 typescript 문자열을 title에 타입으로 부여하면 아래와 같이 title에 typescript가 아닌 다른 값을 입력하면 컴파일 에러가 발생한다.
이는 string, number 등 포괄적인 의미를 담고 있는 primitive type 뿐만 아니라 typescript 문자같은 정확한 값을 타입으로 선언할 수 있다.
타입 추론
정적 타이핑을 해주는 언어에는 대개 타입추론 이라는 기능이 포함되어 있다 선언하는 모든 변수마다 항상 그 타입까지 같이 적어주어야 한다면 매우 불편하다 이때 타입 추론을 지원하는 언어에서는 위에서 언급했던 리터럴 타입을 보고 해당 변수의 타입을 자동으로 지정해준다.
TypeScript 역시 타입 추론 기능을 잘 지원하고 있다.
위 예제를 보면 Typescript는 똑똑하게 title 변수가 string 타입이라는 것을 알아차린 것을 확인할 수 있다.
만약 let 대신 const로 변수를 선언하면 아래와 같이 string 대신 typescript로 타입이 추론되는 것을 확인할 수 있다 이는
Typexcript 에서는 위에서 언급한 특정 문자열 자체를 타입으로 다룰 수 있는 리터럴 타입을 지원하기 때문이다 즉 title 변수는 반드시 'typescript' 문자열이어야 하며 다른 문자열이 될 수 없다는 사실을 알린다.
또한 Typescript는 변수를 let으로 선언하느냐 const로 선언하느냐에 따라 타입 추론의 규칙이 달라지는 것을 확인할 수 있다 이는 굉장히 합리적인데 let 변수는 다른 값이 재할당 될 수 있고 const변수에는 다른 값이 재할당 될 수 없기 때문이다
const assertion
Typescript 3.4에 추가된 const assertion 기능을 사용하면 let 변수에도 const 변수를 사용할 때와 같은 타입 추론 규칙을 적용할 수 있다.
const assertion을 적용하려면 위 예제처럼 단순히 const 키워드를 이용해 타입 단언해주면 된다.
title을 let 변수로 선언했음에도 마치 const 변수로 선언한 것 처럼 'typescript' 리터럴 타입으로 추론되는 것을 확인할 수 있다.
당연히 title 변수에 'typescript' 이외의 다른 값을 대입하려고 하면 컴파일 에러가 발생한다.
객체에 대한 const assertion
이러한 const assertion은 객체에서 사용했을 때 빛을 발한다.
객체인 경우 변수가 const로 선언되었다 할지라도 객체 내부읫 ㅗㄱ성에 대한 타입은 포괄적인 타입 범위로 추론된다 이것 역시 생각해보면 당연한건데 변수가 const일지라도 객체 프로퍼티의 값은 언제든지 변경될 수 있기 때문이다.
이런 경우에 드디더 const assertion을 이용해서 타입 추론의 범위를 좁혀줄 수 있다.
const assertion을 이용하니 obj 내부의 속성들의 타입이 리터럴 타입으로 추론된 것을 확인할 수 있다.
enum
추가적으로 상수를 관리할 때 enum도 많이 사용한다.
enum을 통해서 Colors를 선언해주었는데 const assertion과 마찬가지로 타입이 자동으로 리터럴 타입으로 추론되는 것을 확인할 수 있다.
enum은 TypeScript에서 제공하는 문법으로 크게 몇가지 특징이 있다.
1. enum은 Javascript 객체이나 내부 속성을 임의로 변경할 수 없다.
2 enum의 key는 반드시 리터럴 타입으로만 사용 가능하다.
3 enum의 속성 값 또한 마찬가지로 리터럴 타입만 사용 가능하다
'타입스크립트' 카테고리의 다른 글
[TypeScript] - is 키워드 (0) | 2022.10.13 |
---|---|
[TypeScript] - 함수 오버로딩 (0) | 2022.09.30 |
[TypeScript] - 화살표 함수에서 제네릭 사용 방법 (0) | 2022.08.23 |
[TypeScript] - 타입 호환 (0) | 2022.07.29 |
[TypeScript] - 타입 추론 (0) | 2022.07.17 |