타입스크립트 - Literal Type

Sungw__k·2022년 10월 15일
0
post-thumbnail

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

let john :'대머리';
let kim :'솔로'|'커플';

이렇게 특정 글자나 숫자만 가질 수 있게 제한을 두는 타입을 literal type 이라고 부른다.
or 기호도 사용이 가능하다.

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

이렇게 함수 리턴 값이나 파라미터에도 사용이 가능하다.

어떻게 보면 const 변수의 업그레이드 버전이다. const 변수는 값을 하나만 가질 수 있지만 literal type은 or 기호로 옵션을 둘 수도 있다.


as const 문법

var 자료 = {
  name : 'kim'
}

function 내함수(a : 'kim') {

}
내함수(자료.name)

'kim'이라는 타입만 들어올 수 있는 함수를 선언하고 위처럼 사용하면 될것같지만 에러가 난다. 왜냐하면 함수는 'kim'타입만 입력할 수 있다고 해놨는데 자료.name은 string타입이지 'kim'(literal)타입이 아니기 때문이다.

이를 해결하고 싶으면
1. object 만들 때 타입을 미리 잘 정하든가
2. assertion을 사용하든가 (as 'kim')
3. 아니면 as const 라는걸 애초에 object 자료에 붙이면 된다.

var 자료 = {
  name : 'kim'
} as const;

function 내함수(a : 'kim') {

}
내함수(자료.name)

as const는 효과가 2개인데
1. 타입을 object의 value로 바꿔주고 (위에서는 name의 타입을 'kim'으로 변경)
2. object안에 있는 모든 속성을 readonly로 바꿔준다. (변경하면 에러)

0개의 댓글