const mike = { friends: ['june', 'james']};
const totalFriends = mike.friendsList.length;
위와 같은 자바스크립트 코드가 있다고 해보자.
위 코드는 friendsList라는 잘못된 프로퍼티를 가져오고 있기 때문에
TypeError: Cannot read property 'lenngth' of undefined
라는 에러가 런타임 시에 발생한다.
문제는 이걸 컴파일 타임이 아니라 런타임 떄 나온다는 것이다.
개발 단계에서 미리 발견하고 조치하는 게 아니라 사용자에게 에러가 노출이 될 확률이 높기 때문이다.
하지만 위와 똑같은 코드를 타입스크립트로 작성하면
IDE(VS CODE)가 에러를 감지하고 바로 개발자에게 알려주며, 컴파일 당시 에러가 발생하여
개발자가 자신의 실수를 고칠 수 있게 한다.
const total = product.
자바스크립트에서는 런타임 이전엔 product의 타입을 알지 못하기 때문에 product가 객체인지 배열인지 알 수 없다.
interface Product {}
let product: Product = {} as Product;
const totalParts = product.parts.length;
하지만 타입스크립트는 미리 타입을 지정하기 때문에 product의 타입이 무엇인지, 또 그 안에 포함된 속성이 무엇인지도 알 수 있다.
또 리팩토링 시 속성의 이름을 바꾸고자 한다면,
자바스크립트 같은 경우 해당 속성을 찾아바꾸기(command + f) 등의 기능을 이용하지만 이 방법은 실수할 여지가 많다.
타입스크립트는 interface등 미리 정의된 속성만 바꿔주면 IDE가 알아서 바꿔준다.
또 타입 스크립트에서 코드는 타입들로 묶여 있기 때문에 파일들을 오가며 탐색하기도 쉽다.