여기서 두 가지를 알고 넘어가야 합니다.
첫째, 타입을 표기할 때는 'hello', 123, false 같은 정확한 값을 입력할 수 있습니다. 이를 리터럴 타입이라고 부릅니다. 리터럴 타입에 대해서는 다음 절에서 자세하게 살펴봅니다.
둘째, 타입을 표기할 때는 더 넓은 타입으로 표기해도 문제가 없습니다. 예를 들어 다음 코드에는 아무런 에러도 없습니다.
const str1: 'hello' = 'hello';
const str2: string = 'hello';
const str3: {} = 'hello';
참고로 {} 타입은 객체를 의미하는 것이 아니라 null과 undefined를 제외한 모든 타입을 의미합니다. 셋 중에서 제일 정확한 타입은 'hello'입니다. 그런데 2.1절에서는 string을 사용했습니다. 틀린 건 아니지만 조금 부정확한 타입을 사용한 셈이죠. 이렇게 개발자의 실수로 타입스크립트가 제대로 추론해준 타입을 쓰지 않고 부정확한 타입을 쓸 수 있습니다. 가만히 있으면 정답인데 괜히 긁어 부스럼을 만든 셈이죠.
이러한 이유로 타입스크립트가 제대로 추론했다면 그대로 사용하고, 잘못 추론했다면 그때 직접 타입을 표기한다는 원칙을 세우게 되었습니다.