const obj = { width: 10, height: 15 };
//NaN
const area = obj.width * obj.heigth;
// @errors: 2551
const obj = { width: 10, height: 15 };
const area = obj.width * obj.heigth;
TypeScript는 JS의 구문이 허용되는, JavaScript의 상위 집합 언어이다. 예를 들어, 다음 코드는 )이 없으므로 구문 오류다.
// @errors: 1005
let a = (4
TypeScript는 다른 종류의 값들을 사용할 수 있는 방법이 추가된, 타입이 있는 상위 집합이다.
위의 obj.height 오류는 구문 오류가 아닌, 값의 종류(타입)를 잘못 사용해서 생긴 오류다.
console.log(4 / []);
런타임 특성
TypeScript는 JavaScript의 런타임 특성을 가진 프로그래밍 언어다. 예를 들어, JavaScript에서 0으로 나누는 행동은 런타임 예외로 처리하지 않고 Infinity 값을 반환한다. 논리적으로 TypeScript는 JavaScript 코드의 런타임 특성을 절대 변화시키지 않는다.
삭제된 타입
TypeScript의 컴파일러가 코드 검사를 마치면 타입을 삭제해서 결과적으로 "컴파일된" 코드를 만든다. 즉 코드가 한 번 컴파일되면, 결과로 나온 일반 JS코드에는 타입 정보가 없다.
타입 정보가 없는 것은 TypeScript가 추론한 타입에 따라 프로그램의 특성을 변화시키지 않는다는 의미다.