일반 글자나 숫자같은 것들도 타입이 될 수 있다.
let john :'대머리';
let kim :'솔로'|'커플';
이렇게 특정 글자나 숫자만 가질 수 있게 제한을 두는 타입을 literal type 이라고 부른다.
or 기호도 사용이 가능하다.
function 함수(a : 'hello') : 1 | 0 | -1 {
return 1
}
이렇게 함수 리턴 값이나 파라미터에도 사용이 가능하다.
어떻게 보면 const 변수의 업그레이드 버전이다. const 변수는 값을 하나만 가질 수 있지만 literal type은 or 기호로 옵션을 둘 수도 있다.
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로 바꿔준다. (변경하면 에러)