Literal Type, as const
13 Apr 2023 | typeScript코딩애플강의를 보고 정리했습니다.
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’타입이 아니기 때문이다.
해결방안으로는 다음이있다.
- object만들 때 타입을 잘 미리 정하기,
- assertion사용하기 (as ‘kim’)
as const
object 자료에 붙이기
EX)
var 자료 = {
name : 'kim'
} as const;
function 내함수(a : 'kim') {
}
내함수(자료.name)
as const
의 효과
- 타입을 object의 value로 바꿔줌.
(타입을 ‘kim’으로 바꿔줌) - object안에 있는 모든 속성을 readonly로 바꿔줌 (변경하면 에러나게끔)
object를 잠그고 싶다면as const
를 활용해보자