1. 리터럴 타입이란?
- 타입에 자료형을 부여하는 대신 구체적인 값을 부여하는 방식으로 더 엄격한 타입 제어가 가능하다.
- 그 값 자체가 타입이 되어 변수에 부여할 수 있음
- 타입스크립트가 자동완성을 제공한다는 장점이 있다.
type NameType = "choi" | "sj"
const name: NameType = "choi"
2. 주의점
1) 문제점
const info = {
name: "choi"
}
const fn = (x: "choi") => {
return ~
}
fn(info.name)
- 위 같은 경우 함수의 인자로 넣을 수 없다는 에러가 뜰 것이다.
- 왜냐하면 함수는 x 파라미터에 ‘choi’이라는 타입만 입력할 수 있다고 해놨고 info.name이라는 것은 string 타입이지 ‘choi’타입이 아니기 때문이다.
2) 해결
① assertion
- assertion 문법을 사용해서 인자를 ‘choi’타입으로 덮어씌운다.
as ‘choi’
② as const
const info = {
name: "choi"
} as const
const fn = (x: "choi") => {
return ~
}
fn(info.name)
- as const의 효과는 2개이다.
- 타입을 object의 value로 바꿔준다. (즉, name의 타입을 string이 아닌 'choi'으로 바꿔준다.)
- object안에 있는 모든 속성을 readonly로 바꿔준다. (변경하면 에러나게 하기 위함)
- 즉 object 자료를 리터럴 타입으로 완전히 잠그려면 as const를 쓴다.