니꼬쌤 무료강의를 듣고 typescript를 시작하기로 했다.
typescript에 대해 몰랐기 때문에 예전부터 스스로 해왔던 질문을 떠올렸다.
왜 typescript를 써야할까?
현업에서 쓰니까? 그럼 만약 나 혼자 프로젝트를 만든다면 나는 typescript를 쓰지 않게될까?
왜 타입이 중요할까?
타입 안정성이 중요한 이유는?
니꼬쌤의 첫 강의는 이에 대한 해답이 들어있었다.
자바스크립트는 생각보다 더 미친 언어였다.
console.log([1,2,3,4] + false)
// JS: '1,2,3,4false'
// TS: Operator '+' cannot be applied to types 'number[]' and 'boolean'.(2365)
function divine(a,b) {
return a / b
}
divine("hello")
// JS: NaN
// TS: Expected 2 arguments, but got 1.
이정도일줄은 몰랐지.
이래도 에러를 안뱉다니 미친건가?
근데 이건 약과라고 한다.
가장 최악의 경우는 런타임 에러라는데..
런타임 에러는 구체적으로는 코드를 실행시켜야 나는 에러를 뜻한다. .
그냥 자바스크립트만 써봤던 나로서는 조금 당연하게 생각했던 부분인데 사실 아니었나보다.
실행을 안시켜도 실수를 잡아주는게 가능하다니!
const jaejun = {
nickname: "kim"
}
console.log(jaejun.hello())
// JS: 런타임 에러(미리 잡지 못하고 실행을 해봐야 알게되는 에러라는 뜻)
// TS: Property 'hello' does not exist on type '{ nickname: string; }'.(2339)
이 코드가 실행이 되기 전까진 자바스크립트는 에러를 뱉지 않을 것이다 웹서버 만들면서 많이 겪어본 문제기도 하다.
만약 웹서버를 만든 상황이고 내 restAPI에 이런 코드가 있다면 웹서버는 무리없이 실행이 될 것이다. API요청을 받아 코드를 실행시키기 전까지는 그 코드가 어떤 문제가 있는지 전혀 알 수 없었다.
하지만 typescript는 그런 상황을 어느정도 방지할 수 있다고 한다. js파일로 컴파일을 하는 과정, 아니 그 이전부터 오류를 잡아서 오류를 고치기 전까지는 컴파일조차 되지 않는다고 하니까..
ts뿐만 아니라 대부분의 좋은 프로그래밍 언어는 객체를 분석해서 hello() 라는 메서드가 객체에 없다는 사실을 알려준다고 한다. 음...
열심히 배우자!