# 1 INTRODUCTION
타입 안정성 때문이다. -> 코드의 버그, 런타임 에러 등이 줄어들고 생산성이 늘어남
자바스크립트는 매우 유연한 언어이다. 개발자가 정신 나가도 개발자를 이해하고 도와주려 함... 현명한 청년
런타임 에러는 유저가 컴퓨터에서 코드를 실행했을 때 나타남 그럼 안 되,,, 실행 전에 언어가 객체 등을 분석하고 에러를 보내줘야함 최악의 에러임...
# 2 OVERVIEW OF TYPESCRIPT
타입스크립트는 strongly typed(강타입) 언어이다. 작성한 ts 코드는 js 로 변환된다. 브라우저가 타입스크립트가 아니라 자바스크립트를 이해하기 때문이다. 하지만 작성한 ts 에 에러가 발생할 것 같으면 js 로 컴파일되지 않는다.
let b = false 도 가능! b 는 boolean 이란 뜻이다. ts 는 타입을 추론해준다. ts 가 타입을 추론하지 못할 때는 (아무 요소 없는 빈 배열이라서 추론이 불가능할 때) 타입을 명시적으로 표현함 (ex. let c : number[] = []) 하지만 ts 가 추론하도록 두는 것이 더 좋다.
Alias 타입
Alias 타입이란 별칭이다. type 키워드를 사용해서 type 에 이름을 설정하는 방법이다. type 뒤에 별칭을 입력하고 = 연산자 뒤에 타입을 정의하면 된다. 별칭은 관습적으로 대문자로 시작한다. argument 의 타입을 정하는 것도 있다. 함수의 return 값의 타입을 지정하는 방법도 있을까? 함수가 return 하는 값의 타입을 알면 더 많은 보호장치와 자동완성을 사용할 수 있을 것이다.
readonly
타입의 속성에 readonly 추가해줄 수 있다.
readonly 인 값은 수정할 수 없다.
타입 중에 any 가 있다. any 는 타입스크립트의 보호 장치에서 빠져나오는 것이다. 사용을 비추천하지만 언젠가 종종 쓸 때가 있다. any 를 사용하는 규칙을 설정해주면 더 똑똑하게 사용할 수 있다.
unknown
그렇다면, 타입을 모를 땐 타입을 어떻게 설정해야 할까? 타입스크립트에는 자바스크립트와 달리 변수의 타입을 미리 알지 못할 때 사용하는 unknown 이라는 타입이 있다. unknown 타입인 값을 사용할 때는 사용 전에 어떤 타입인지 확인해주는 과정을 거쳐야한다.
void
void 는 아무 것도 return 하지 않는 함수를 대상으로 사용한다. void 를 따로 설정해주지 않아도 타입스크립트는 알고 있다.
never
함수가 절대 return 하지 않을 때 발생한다. 예를 들어 함수에서 예외가 발생할 때. 또한 타입이 두 가지일 수도 있는 상황에 발생할 수 있다.
# 3 FUNCTIONS
call signatures
함수 위에 마우스를 올렸을 때 보게 되는 것
함수를 구현하기 전에 미리 타입을 정의해두면 나중에 함수 위에 마우스를 올렸을 때 해당 정의된 타입의 타입을 알 수 있다. 파라미터의 타입과 리턴 타입
overloading
함수가 서로 다른 여러 개의 call signatures 를 가지고 있을 때 발생시킨다.
polymorphism (다형성)
여러 가지 다른 형태들의 함수! generic... concrete type 일 때 반복적인 타입 선언이 일어난다. concrete type 이란 우리가 봐온 number, boolean, string 등의 타입으로 타입스크립트에게 generic 타입을 받을 것이라고 알려줘야 한다.generic 이란 타입의 placeholder 라고 말할 수 있다. 즉 타입스크립트가 타입을 유추할 수 있도록 한다는 말이다. 우리는 call signature 를 작성할 때 들어올 확실한 타입을 모를 때 generic 을 사용한다.
보통 <T> 를 많이 사용한다. 이것이 타입스크립트에게 이 call signature 가 제네릭을 받는다는 것을 알려주는 방법이다. <T> 라고 제네릭을 선언해주고 타입 자리에 해당 제네릭을 사용해준다. <T> (arr: T[ ]) => T
🚨 그러면 타입 any 랑 다를 게 뭐지? 라는 생각이 들었다. 제네릭과 any 의 공통점은 여러 가지 타입을 허용한다는 것이다. 차이점은 제네릭은 반환 타입의 정보를 알고 있고, any 는 모른다는 점이다. any 는 타입스크립트의 보호를 전혀 받지 못한다. 예를 들면 반환될 배열의 요소가 1 인데 list.toUpperCase() 를 해도 에러가 나지 않는다. 우리가 하는 요청에 따라 타입을 만들어주는 것이 제네릭이다.
'Nomadcoders 보는 중이 싫으면 절이 떠나라' 카테고리의 다른 글
[노마드 코더 Nomardcoders] Next.js 시작하기 (0) | 2024.05.08 |
---|