그럴 때 쓰는 것이 literal types이다.
let john : '대머리';
let kim : '솔로';
위처럼 변수명 뒤에 string, number이 아닌
일반 글자를 붙일 수 있다.
저렇게 타입을 지정해 준다면
john이라는 변수는 '대머리'라는 글자만 할당할 수 있고,
kim이라는 변수는 '솔로'라는 글자만 할당할 수 있다.
literal types ?
특정한 글자나 숫자만 가질 수 있게 제한을 두는 타입!
다른 예들도 들어보자면
let 방향: 'left | right' ;
방향 = 'left';
이렇게 or 연산자처럼 쓸 수 있고
function 함수(a:'hello') : 1|0|-1{
return 1
}
함수에도 똑같이 쓸 수 있다.
파라미터 타입선언할 때 글자나 숫자를 집어넣으면 그것만 파라미터로 넣을 수 있고
return 타입선언할때도 파라미터 타입선언할 때와 동일하게 할 수 있다.
어떻게 보면 const 변수의 업그레이드 버전이라고도 할 수 있다.
변하지 않는 정보를 저장하는 것은 비슷하지만,,
가끔은 변하는 중요한 정보를 저장하고 싶을때는 const를 쓰지 못한다.
그럴 때 literal type을 쓰면 되는 것이다.
var 자료 = {
name : 'kim'
}
function 내함수(a:'kim'){
}
내함수(자료.name)
오류가 뜨는 이유가 무엇일까?
함수는 'kim' 타입만 입력할 수 있다고 해놨고
자료.name은 string타입이지 'kim'타입이 아니기 때문이다.
1,2번은 예전에 다뤄봤으니 이번엔 as const를 다뤄보겠다.
as const의 효과는 2가지 인데
1. 타입을 object의 value로 바꿔준다.
2. object안에 있는 모든 속성을 readonly로 바꿔준다.
고로 as const를 써서 위 코드를 바꿔보자면
var 자료 = {
name : 'kim'
}as const;
function 내함수(a:'kim'){
}
내함수(자료.name)
결국 타입이 'kim'으로 바뀌었기에 정상적으로 실행이 될 것이다.
object를 잠그고 싶다면 as const를 사용해보는 것은 어떨까