[TypeScript] Literal types
2021년 09월 13일
타입스크립트에서 1 또는 0 처럼 특정한 값을 가지도록 제한하고 싶으면 어떻게 해야할까요?
이럴때는 Literal type를 사용하면 됩니다.
Literal type
Literal type은 어떤 변수가 미리 골라놓은 데이터만 가질 수 있게 해줍니다.
string, number 이런 것만 타입이 될 수 있는게 아니라, 문자열도 타입이 될 수 있습니다.
let direction : 'left' | 'right';
direction = 'left';
// direction은 left 또는 right만 사용 가능
함수도 마찬가지입니다.
매개변수 타입을 선언할 때 글자나 숫자를 넣으면 그것만 파라미터로 넣을 수 있고 return 타입을 선언할 때도 문자열이나 숫자를 넣으면 그 값만 return할 수 있습니다.
function f (a : 'hello') : 1 | 0 | -1 { // 매개변수로 'hello'만 넣을 수 있고 1, 0, -1만 return 할 수 있다.
return 1
}
as const
만약 ‘kim’이라는 타입만 들어올 수 있는 함수에 person.name을 입력하고 싶은데
let person = {
name : 'kim'
}
function f(a : 'kim') {
}
f(person.name) // 에러 발생.
에러가 나는 이유는 함수는 ‘kim’ 타입만 입력할 수 있다고 지정했는데, person.name은 string 타입이기 때문입니다.
이를 해결하려면 다음과 같은 방법들이 있습니다.
1. object를 만들 때 타입을 미리 잘 정하기
2. assertion (as ‘kim’ )
3. object에 as const를 붙이기
let person = {
name : 'kim'
} as const; // 이렇게
function f(a : 'kim') {
}
f(person.name)
as const 의 효과
1. object의 value를 타입으로 바꿔준다 (위의 예에서 ‘kim’이 type이 됨)
2. object 안에 모든 속성을 readonly로 바꿔준다.
Tags