# Why not JavaScript
"안정성, 더 정확히 말해서 타입 안정성"
- 코드에 버그가 줄어듦
- 런타임 에러가 줄어든다
- 개발 생산성 향상
하지만 자바스크립트는?
* 문제점 1 * 에러를 보여주지 않으려고 많은 노력을 함.
[EX1]
[1,2,3,4] + false
// '1,2,3,4false'
배열도 아닌, boolean도 아닌 string이 콘솔에 찍힌다. 이는 굉장히 이상하다고 볼 수 있는 자바스크립트는 이를 허용함
[EX2]
function divide(a,b) {
return a/b
}
divide("xxxxx")
// NaN
코드를 실행하고 NaN을 return함. 숫자형도 아니며, argument가 1개만 들어갔음에도 에러가 없고 예외 처리도 없음
* 문제점 2 * 최악의 에러는 런타임 에러
런타임 에러 : 콘솔 안에서 일어나는 에러
ㄴ 유저의 컴퓨터에서 이미 컴파일이 완료되어 코드가 실행될 때 일어나는 에러
[EX3]
const yeeun = {name : "yeeun")
yeeun.hello()
- 이상적으로 코드가 실행되기 전에 hello() 함수가 없다는걸 알려주는게 가장 좋음
- 하지만 javascript는 유저의 컴퓨터에서 이 코드를 실행해야만 비로소 에러를 보여줌
- 좋은 프로그래밍 언어는 hello()가 없다는걸 알고 시작조차 컴파일조차 안됨
# How Typescript Works
타입스크립트(Typescript) : 강타입 프로그래밍 언어
강타입 언어 : 프로그래밍 언어에서 Integer(정수), String(문자열)과 같이 데이터의 타입을 미리 지정하는 언어
타입스크립트의 경우에는 작성한 코드가 자바스크립트로 컴파일 된다. 보통 컴파일은 0과 1로 이뤄진 컴퓨터가 알아들을 수 있는 언어로 바꿔주는 과정을 거치지만, 타입스크립트는 자바스크립트로 바꿔진다는 뜻이다.
ㄴ TS가 제공하는 보호장치는 JS로 변환되기 전에 작동된다. 즉, typescript에 에러가 있다면 javascript로 컴파일 되지 않기 때문에 변환된 javascript 안에서 실수가 일어나지 않게 한다.
TS는 바로 에러를 표시해줌. -> Property 'hello' does not exist on type '{ nickname: string; }'.(2339)
# Implicit Types vs Explict Types
1. 타입 추론
let a = "hello"
const player = {
name : "yeeun"
}
2. 명시적 표현
ㄴ 명시적 표현은 최소한으로 사용하는게 좋음
let b : boolean = true
let c : number[] = []
* 해당 게시물은 노마드코더 강의를 참고하여 쓰여졌습니다. *
'TypeScript' 카테고리의 다른 글
[TS] Typescript #day3 (1) | 2024.12.18 |
---|---|
[TS] Typescript #day2 (0) | 2024.12.18 |
[TypeScript] 타입스크립트란? (1) | 2024.02.26 |
[Error] addCase cannot be called with two reducers for the same action type (2) | 2023.11.23 |