타입스크립트는 타입을 추론할 때 단순히 값만 고려하는 게 아니라 값이 존재하는 곳의 문맥도 사용한다.
type Language = 'JavaScript' | 'TypeScript' | 'Python';
function setLanguage(language: Language) {/*...*/}
setLanguage('JavaScript'); // 정상
let language = 'JavaScript'
setLanguage(language);
// ~~~~ 'string' 형식의 인수는 'Language' 형식의 매개변수에 할당될 수 없다.
const language = 'JavaScript';
setLanguage(language) // 정상
튜플, 객체
function panTo(where :[number,number]){/*...*/}
panTo([10,20]) // 정상
const loc = [10,20];
panTo(loc) // error
function panTo(where : readonly [number,number]){/*...*/}
panTo([10,20]) // 정상
const loc = [10,20] as const;
panTo(loc) // 정상