For New Programmer
1.자바스크립트의 동일 연산자는 인수를 강제로 변환하여 예기치 않은 동작을 유발한다.
if(“” == 0) // 참
if(1<x<3) // 어떤 x값이든 참임
2.자바슼릡트는 존재하지 ㅇ낳는 프로퍼티의 접근을 허용한다.
const obj = { width: 10, height: 15 };
const area = obj.width * obj.heigth;
=> 보통은 컴파일중에 오류를 표출함 근데 프로젝트가 커지면 관리가 안됨
Typescript : 정적 타입 검사자
버그가 많은 프로그램을 아예 실행시키지 않음 -> 정적 검사
뭐가 오류인지 =뭐가 연산되는 값에 기인하지 않은건지 정하는것이 정적 타입 검사임
타입스크립트는 프로그램 실행전에 값의 타입을 기반으로 프로그램의 오류를 찾음
Superset: 타입이 있는 javascript의 상위 집합
->타입스크립트 : 자바스크립트의 구문 + 타입의 값들을 사용할 수 잇는 방법 = 자바스크립트의 상위 집합 언어임
Ex)
console.log(4 / []);
//자바스크립트는 NaN, Infinity
//타입스크립트는 오류를 발생
타입스크립트는 자바스크립트의 런타임 특성을 가진 프로그램 언어임
자바스크립트에서 0으로 나누는 행동은 런타임 예외가 아니라 Infinity값을 반환함
타입스크립트에서 0으로 나누는 행동은 자바스크립트의 런타임 특성을 가졌으므로 오류가 있음을 검출할지언정 같은 방식으로 실행시킬것을 보장한다
삭제된 타입
타입스크립트 컴파일러가 코드 검사를 마치면 타입을 삭제해서 결과적으로 컴파일된 코드를 만듬
즉, 코드가 컴파일 되면 일반 JS코드가 되므로 타입 정보가 없음
결과적으로 타입스크립트는 컴파일 도중에는 타입오류를 표출하지만 프로그램이 실행될때는 타입검사를 하지 않음
나의 정리:
자바스크립트는 타입 검사 자체가 없고 타입에 대해 아주 관대하기 때문에 특정 타입을 다른 타입의 사용법처럼 사용할 경우가 있음
타입을 잘못 사용해서 예상치 못한 오류가 생기는 것을 방지하기 위해 타입스크립트를 사용해서 컴파일 과정에서 예상치 못한 오류를 잡는것
어떤 함수에 들어가는 인자는 string값만 받는다든지 number값만 받든지해서 컴파일단계에서 오류를 잡음
그리고 타입스크립트로 만든 코드를 컴파일하면 자바스크립트 코드가 만들어지므로 실행되 런타임환경에서는 신경쓰지 않아도됨