[TypeScript] Literal Type

2022. 5. 25. 14:50·TypeScript/기초
반응형

1. Literal Type ? 

자바스크립트로 개발을 하다가 특정 변수는 1의 값만 가지게 하고 싶을 때가 있다. 

그럴 경우 보통은 const 키워드를 사용해 

const num = 1;

처럼 선언해서 사용한다. 

 

그런데, 1 또는 0을 가질 수 있게 제한하고 싶은 경우에는 어떻게 해야할까? 

그럴 때 바로 Literal Type을 이용해서 선언하면 된다. 사용하면 미리 정해둔 데이터만 변수가 가질 수 있게 만들어준다. 

 

2. Literal Type 사용법 

TypeScript로 타입을 지정할 때 string, number 같은 타입만 선언할 수 있는 것이 아니다. 

일반 글자같은 것도 타입이 될 수 있다. 

let seo: "개발자";
let kim: "백수";

" 개발자 " 와 " 백수 " 같은 타입도 만들 수 있다. 

이렇게 선언하면 해당하는 타입만 값으로 가질 수 있게 된다. 

 

즉, 특정 글자나 숫자만 가질 수 있게 제한을 둘 수 있다. 

 

let 방향: "left" | "right";
방향 = "left";

or 기호(Union Type )를 사용해서 'left' 혹은 'right' 글자만 가지게 할 수 있는 변수를 만들 수 있다. 

 

function 함수(a :'hello') : 1 | 0 | -1 {
	return 1;
}

함수도 마찬가지로 파라미터 타입 선언할 때 글자나 숫자, return 타입 선언할 때 글자나 숫자를 넣어 

지정할 수 있다. 

 

function 밥(people: 1 | 2 | 3) :("고등어구이"|"소고기국"|"자장면"|"초밥")[] {
	return ["고등어구이", "자장면", "초밥"];
}

return 타입에 배열을 선택해서 return 하고 싶은 경우에도 물론 가능하다. 

 

3. as const 문법

const 자료 = {
    name: "kim"
}

function 함수(a : "kim") {
//  ...
}

함수(자료.name)  // 에러

Literal Type을 통해서 a는 " kim " 이라는 타입의 값만 들어올 수 있는 함수를 만들었고, 

자료의 name은 " kim " 이라는 값을 가지고 있지만 함수(자료.name)은 에러가 난다. 

 

그 이유는 함수는 분명 " kim " 이라는 타입만 들어올 수 있는데,

자료.name은 " kim " 이라는 값을 가진 " string " 타입이기 때문이다. 

 

이것을 해결하고 싶다면,

  1. object를 만들 때 미리 타입을 선언해서 해결한다. 
  2. assertion을 사용해서 해결한다. 
  3. as const를 사용해서 해결한다. 

라는 선택지가 있다. 

 

const 자료:{
	name: "kim"      // 1번 해결
} = {
    name: "kim"
}

const 자료 = {
    name: "kim"
} as const               // 3번 해결

function 함수(a : "kim") {
//  ...
}

함수(자료.name as "kim")  // 2번 해결

as const 라는 키워드는 2가지의 기능이 있다. 

  1. 타입을 object의 value로 바꿔준다. ( 즉, 타입을 " kim " 으로 바꿔준다. )
  2. object 안에 있는 모든 속성을 readonly로 바꿔준다. ( 변경 시 에러가 난다. ) 

object를 잠그고 싶다면 as const를 활용하면 된다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'TypeScript > 기초' 카테고리의 다른 글

[TypeScript] HTML 조작 및 주의점  (1) 2022.05.27
[TypeScript] 함수와 method에 type alias 지정하기  (1) 2022.05.26
[TypeScript] type 키워드 & readonly  (1) 2022.05.10
[TypeScript] 타입 확정하기  (1) 2022.05.09
[TypeScript] 함수에 타입 지정하기  (1) 2022.05.08
'TypeScript/기초' 카테고리의 다른 글
  • [TypeScript] HTML 조작 및 주의점
  • [TypeScript] 함수와 method에 type alias 지정하기
  • [TypeScript] type 키워드 & readonly
  • [TypeScript] 타입 확정하기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    바질
    CSS
    ReactNative
    Docker
    typescript
    리액트
    CCNA
    덤프
    Node.js
    redux
    영어회화
    다이소
    영어독학
    next.js
    react
    네트워크
    자바스크립트
    네이버 부스트캠프
    프로그래머스
    ChatGPT
    타일러영어
    리얼클래스
    javascript
    타입스크립트
    식물
    바질 키우기
    알고리즘
    Babel
    webpack
    리얼학습일기
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[TypeScript] Literal Type
상단으로

티스토리툴바