Literal types는 단순한 타입 뿐만 아니라 정확한 값을 지정할 수 있다.
type LastName = 'Kim';
const person :LastName = 'Park';
위 처럼 Kim이라는 값을 타입으로 지정했다면 그에 맞는 값은 무조건 Kim 이어야한다.
type LastName = 'Kim' | 'Park';
const person :LastName = 'Park';
이런식으로 | 을 이용해서 선택지를 넓힐 수 있다.
const addNum = (a : 2) : number => {
return a;
}
addNum(3)
함수도 마찬가지이다.
const 자료 = {
name: "kim",
}
const 함수 = (a: "kim") => {
return a;
};
함수(자료.name);
위의 코드는 자료.name이 "kim" 이고, 함수 파라미터도 'kim'이기 때문에 오류가 나지 않을거라고 생각하지만 오류가 난다.
자료.name 은 string 타입으로 인식하고 a : "kim"은 string이 아닌 "kim" 타입 그 자체로 인식한다.
이럴때 const 라고 하더라도 프로퍼티가 string으로 인식될때, as const를 붙여주면 그 값자체가 타입이 된다.
const 자료 = {
name: "kim",
} as const;
const 함수 = (a: "kim") => {
return a;
};
함수(자료.name);
as const 의 효과는
const 자료 = {
name: "kim",
} as const;
자료.name = 'park';
객체를 변경 못하도록 하게 하고 싶다면 as const를 붙여서 그 객체를 잠궈주면 된다.