개발 도중 런타임 에러가 아닌, 코드의 논리적인 실수로 인해 웹 애플리케이션에서 발생할 수 있는 문제들을 개발 도중에 포착할 수 있음! 즉, 보다 깔끔하고 에러가 적은 코드를 작성하도록 돕는다!
컴퓨터 과학에서 슈퍼셋(Superset)이란 특정한 언어의 모든 기능을 포함하면서, 다른 기능까지 포함하도록 향상 또는 확장된 것을 의미
출처 : eensungkim님 Velog - TypeScript (TIL 96일차)
타입
을 추가npm install -g typescript
// 예시 코드
const button = document.querySelector("button");
const input1 = document.getElementById("num1");
const input2 = document.getElementById("num2");
function add(num1, num2) {
return num1 + num2;
}
button.addEventListener("click", function() {
console.log(add(input1.value, input2.value));
});
예시 코드를 .ts 파일로 생성하면 value
속성이 실제로 있는지 확실하지 않다고 오류를 띄워 주는데, 이는 바닐라 자바스크립트에서는 고려조차 하지 못하는 실수다!
value
속성을 가지고 있지 않음// 예시 코드 수정 파트 1
const input1 = document.getElementById("num1")! as HTMLInputElement;
const input2 = document.getElementById("num2")! as HTMLInputElement;
!
를 추가함으로써 요소를 얻을 것임을 타입스크립트에게 알릴 수 있음! 즉, 결코 null
을 야기하지 않는다고 알리는 것input
요소이기 때문에 형 변환이라는 HTMLInputElement
로 사용할 수 있음타입스크립트는 개발자가 의도를 더 명확히 하고, 코드를 다시 확인하도록 요구하며 도와준다는 것을 확인할 수 있음!
Type
!(parameter) num1: any
이러한 IDE 메시지에서 타입스크립트가 말하고자 하는 것은 결국,
"그 안에 무엇이 있는지 알지 못하며 어떤 타입의 값이든 될 수 있다" 는 것인데
우리는 타입스크립트를 이용함으로써 보다 명시적인 타입을 추가할 수 있음!
// 예시 코드 수정 파트 2
function add(num1: number, num2: number) {
return num1 + num2;
}
button.addEventListener("click", function() {
console.log(add(+input1.value, +input2.value));
});
num1
과 num2
는 Number
타입이 될 것이라고 명시 가능input1.value
와 input2.value
가 String
타입이므로 발생하는 오류를 형 변환하여 해결 가능이러한(! as .., :number) 타입스크립트 코드들은 자바스크립트로 컴파일할 때 코드를 평가하고 잠재적 에러를 찾는 데 사용되지만, 해당 작업 후에 제거되고 일반 자바스크립트가 출력으로 얻어짐!