Literal Type, as const

|

코딩애플강의를 보고 정리했습니다.

Literal Type

  • 특정 글자나 숫자만 가질 수 있게 제한을 두는 타입이다.

Ex)

// 이제 john은 '대머리'라는 글자만 할당 가능함
let john: '대머리';

// 이제 kim은 '솔로'라는 글자만 할당 가능함
let kim: '솔로';
// or기호 써도 됨
// 방향이라는 변수는 이제 left 또는 right만 할당 가능함
let 방향: 'left' | 'right';
방향 = 'left';
  • 함수도 똑같다.
  • 파라미터 선언할 때 글자나 숫자 집어넣으면 그 값만 파라미터로 넣을 수 있고,
  • return 타입선언할 때도 글자나 숫자를 집어넣으면 그 값만 return할 수 있다.
function 함수(a: 'hello'): 1 | 0 | -1 {
  return 1;
}

as const

‘kim’이라는 타입만 들어 올 수 있는 함수인데, 이렇게 하면 에러가난다.

var 자료 = {
  name: 'kim',
};

function 내함수(a: 'kim') {}
내함수(자료.name);

이유는 함수는 ‘kim’타입만 파라미터에 들어올수 있다고 해놨고,
자료.name이라는건 string 타입이지, ‘kim’타입이 아니기 때문이다.
해결방안으로는 다음이있다.

  1. object만들 때 타입을 잘 미리 정하기,
  2. assertion사용하기 (as ‘kim’)
  3. as const object 자료에 붙이기

EX)

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

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

}
내함수(자료.name)

as const의 효과

  • 타입을 object의 value로 바꿔줌.
    (타입을 ‘kim’으로 바꿔줌)
  • object안에 있는 모든 속성을 readonly로 바꿔줌 (변경하면 에러나게끔)
    object를 잠그고 싶다면 as const를 활용해보자