literal types로 타입 지정해보자.
이렇게 변수를 만들 때 아예 타입 지정을 number나 string이 아닌
고유한 값으로 직접 지정해줄 수 있다.
이것을 literal types라고 한다.
이렇게 literal types로 타입을 정해주면
저 변수는 타입으로 정해진 저 값밖에 할당받지못한다.
이렇게 타입으로 지정받지않은 값이 할당되면 에러가 난다.
이 방법을 더 확장해서
이렇게 union 타입으로 특정 값의 범위 안에서만 받도록
지정도 가능하다.
여기서 이상한 점이 있는데,
이 방법은 에러가 난다.
왜냐면 함수 파라미터에는 'kim'이라는 타입의 변수를 요구하는데,
자료.name은 값만 'kim'일뿐 실질적인 타입은 'string'이기때문이다.
근데,
이건 또 작동한다.
여기서 알 수 있는 점은 const로 생성한 변수가 원시 타입을 할당받았다면,
값과 타입이 동일해져버린다!
그럼 과연 var과 let은 어떨까.
var과 let으로 선언한 변수들은 값과 타입이 동일해지지않는다.
할당된 값이 string이면 그대로 string, number이면 그대로 number가 타입으로 지정된다.
따라서 const는 재선언, 재할당이 불가능한 타입일뿐만아니라,
원시타입일경우 타입과 값이 동일하게만드는 효과를가진다.
그래서 as const라는 방법도 존재한다.
이렇게 as const라는 문법을 사용해서
프로퍼티의 값이 타입으로도 쓰일 수 있게끔하거나
이렇게 as 타입 문법을 활용해 컴퓨터를 속일? 수 있다.
(원래 타입인 'string'을 'kim'으로 봐달라고 부탁할 수 있다.)