[패스트 캠퍼스 FE] TypeScript

조규준·2022년 4월 30일
0

[패스트 캠퍼스 FE]

목록 보기
13/20
post-thumbnail

TypeScript



TypeScript 시작하기


TypeScript 란 무엇인가?


VS Code 설치 및 설정

  1. "test.ts" 파일 생성
  2. 터미널에 npm init -y 입력
    (현재 폴더를 npm project로 만듬)
  3. 터미널에 npm i typescript -D 입력
    ("package.json" 파일 안에 "devDepecdencies" 로 추가 : 개발용 모듈이라는 뜻)
  4. 아래의 버젼 숫자를 누르면,
    vscode에 원래 설치된 번들을 이용할지 vs 사용자가 설치한 버젼을 이용할지 선택 할 수 있음


First Type Annotation

특정한 개체가 어떤 타입인지 지정해주는 것.

사용법

: 뒤에 타입 지정

let a: number;

a = 39;






TypeScript의 Basic Type들


TS Types vs JS Types

기본적으로 TS는 Static Type,
(개발하는 중간에 Type 체크)

JS는 Dynamic Type 이다.
(런타임에 들어간 다음 Type 체크)

예시 코드

타입들 훑어보기






Primitive Types (원시 자료형)


오브젝트와 레버런스 형태가 아닌 실제 값을 저장하는 자료형
Primitive 형의 내장 함수를 사용 가능한것은 자바스크립트 처리 방식 덕분

6가지 (ES2015 기준)

  • boolean
  • number
  • string
  • symbol (ES1025)
  • null
  • undefined

* literal 값으로 Primitive 타입의 서브 타입을 나타낼 수 있음.

** * 또는 래퍼 객체로 만들 수 있음.

💡 모두 소문자로 써야한다.


boolean

딱히 쓸게 없다... 하하~

Number / number


string

Template String


symbol

접근을 막거나, 필요한 경우에만 허락할때 씀


null & undefined



여기서부터는 non-primitive type

object

사용 예제


Array

이런식으로 쓰면, Array의 값에 string , number 둘다 넣을 수 있다.


Tuple

길이가 정해져 있고(2), 앞뒤의 타입이 정확하며 다를 수 있는 자료형.

사용 예시


any

적폐
하나를 "any"로 지정하면 그 하위 객체들이 모두 "any"가 되기 때문에,
왠만하면 지양하는 자료형임.


unknown


never

잘못된 타입을 넣는 실수를 방지하기 위해서 쓰임.


void

return 부분에 달아서 아무것도 하지 않겠다는것을 명시하고, 그것을 막는 행위


타입 시스템


  • 컴파일러에게 사용하는 타입을 명시적으로 지정하는 시스템
  • 컴파일러가 자동으로 타임을 추론하는 시스템

타입스크립트의 타입시스템

타입을 명시적으로 지정할 수 있다.
혹은 지정하지 않으면, 타입스크립트의 컴파일러가 자동으로 타입을 추론함.

작성자와 사용자의 관점으로 코드 바라보기

noImplicitAny

StrictNullChecks

이걸보면, 분명 number라고 타입을 지정했는데
f4(-5)의 결과는 undefined가 나오는 것을 알 수 있음.

이걸 방지하기 위해선,
StrictNullChecks 옵션을 켜야 함.

모든 타입에 자동으로 포함되어 있는 'null' 과 'undefined' 를 제거해줌.

noImplicitReturns

함수 내에서 모든 코드가 값을 리턴하지 않으면, 컴파일 에러를 발생시킴.


모든 통로가 전부다 return 해주도록 강제하는 옵션.

나만의 타입을 만드는 방법


Structural Type System vs Nominal Type System

Structural Type System

구조가 같으면, 같은 타입이다.

Nominal Type System

구조가 같아도 이름이 다르면, 다른 타입니다.

duck typing


타입 호환성 (Type Compatibility)

서브 타입 (1)

서브 타입 (2)

공변

반병

strictFunctionTypes


타입 별칭 (Type Alias)

Aliasing Primitive

Aliasing Union Type

Aliasing Tuple

Aliasing Function

💡 Alias 와 Interface 를 어떻게 구분해서 사용하나?
어떤 Type이 목적이나 존재가치가 명확할 경우 ➡️ Interface
단지 하나의 대상을 가리키거나, 별명으로만 존재할 경우 ➡️ Alias
(* 어디까지나 강사님 기준. 자신만의 기준을 세워보시라!)

profile
사주보는 프론트엔드 개발자

0개의 댓글