티스토리 뷰

인프런 이재승 님 타입스크립트 시작하기 강의를 듣고 여러 레퍼런스를 참고하여 정리한 노트입니다.

1. 타입스크립트란?

자바스크립트의 기능은 모두 지원하면서 정적 타입을 지원하는 자바스크립트의 수퍼셋(superset).

  • 자바스크립트
    • 동적 타입 언어
    • 변수의 type이 런타임에 결정
  • 타입스크립트
    • 정적 타입 언어
    • 변수의 type이 컴파일타임에 결정

동적 타입 언어와 정적 다입 언어는 어떻게 다른가?

  • 정적 타입 언어
    • 진입 장벽 높음(타입 종류나 지정 등 처음부터 배울 양이 많아 일반적으로 높음)
    • 코드의 양이 많을 때 생산성 높음
    • 타입 오류가 컴파일 때 발견
    • 예시: Java, C++, ...
  • 동적 타입 언어
    • 진입 장벽 낮음
    • 코드의 양이 적을 때 생산성 높음
    • 타입 오류가 런 타임 때 발견 -> 사용자에게 버그가 노출될 가능성이 높아짐
    • 예시: Python, PHP, JS, ...

그외 특징

타입스크립트는 마이크로소프트가 개발하고 있고 자바스크립트가 지원하는 기능들은 빠르게 추가된다.

다른 JS 정적 타입 언어들보다 큰 생태계를 갖고 있고

마이크로소프트가 개발한 VS CODE와 궁합이 잘 맞는다.

타입 정의 파일

웬만큼 유명한 라이브러리는 타입스크립트의 타입 정의 파일이 존재한다.

라이브러리에 내장되어 있거나, DefintedlyTyped 라는 깃헙 저장소에 포함되어 있다.

DefintedlyTyped에 추가된 패키지는 @types/name 처럼 앞에 @types가 붙는다.

npm i @types/name 

위와 같이 입력하면 name라는 타입 정의 파일이 설치된다.

참고

2. 타입스크립트를 사용하는 이유: 높은 생산성

컴파일 타임에서 에러 발생 -> 에러 조기 식별 및 조치 가능

const mike = { friends: ['june', 'james']};
const totalFriends = mike.friendsList.length;

위와 같은 자바스크립트 코드가 있다고 해보자.

위 코드는 friendsList라는 잘못된 프로퍼티를 가져오고 있기 때문에

TypeError: Cannot read property 'lenngth' of undefined

라는 에러가 런타임 시에 발생한다.

문제는 이걸 컴파일 타임이 아니라 런타임 떄 나온다는 것이다.

개발 단계에서 미리 발견하고 조치하는 게 아니라 사용자에게 에러가 노출이 될 확률이 높기 때문이다.

하지만 위와 똑같은 코드를 타입스크립트로 작성하면

IDE(VS CODE)가 에러를 감지하고 바로 개발자에게 알려주며, 컴파일 당시 에러가 발생하여

개발자가 자신의 실수를 고칠 수 있게 한다.

컴파일 타임에서 타입이 지정됨

const total = product.

자바스크립트에서는 런타임 이전엔 product의 타입을 알지 못하기 때문에 product가 객체인지 배열인지 알 수 없다.

interface Product {}

let product: Product = {} as Product;

const totalParts = product.parts.length;

하지만 타입스크립트는 미리 타입을 지정하기 때문에 product의 타입이 무엇인지, 또 그 안에 포함된 속성이 무엇인지도 알 수 있다.

또 리팩토링 시 속성의 이름을 바꾸고자 한다면,

자바스크립트 같은 경우 해당 속성을 찾아바꾸기(command + f) 등의 기능을 이용하지만 이 방법은 실수할 여지가 많다.

타입스크립트는 interface등 미리 정의된 속성만 바꿔주면 IDE가 알아서 바꿔준다.

또 타입 스크립트에서 코드는 타입들로 묶여 있기 때문에 파일들을 오가며 탐색하기도 쉽다.

3. 타입스크립트 설치부터 컴파일까지

타입스크립트 설치 및 셋업

일단 node.js 공식홈페이지를 통해 node.js 를 설치한다.

패키지 다운로드를 위해 package.json 파일이 설치.

npm init -y

타입스크립트 설치

npm i typescript

타입스크립트 설정 파일 설치 -> tsconfig.json 이라는 파일 생성

npx tsc --init

여기서 npx 라는 명령어는 node_modules 밑에 .bin이라는 폴더 밑 특정 바이너리(여기선 tsc)를 실행해준다.

tsconfig.json 파일을 살펴보자

target이라는 속성은 컴파일 타겟이다.

{
  "compilerOptions":{
    "target": "es5", // es5로 컴파일하겠다는 뜻이다.
    "module": "commonjs", // 모듈 방식. 다른 방식도 있다.
    "strict": true, // 별다른 이유가 없다면 true로 한다. 타입스크립트의 장점인 정적 타입화를 잘 할 수 있기 때문. 단 JS -> TS로 마이그레이션 하는 경우, strict는 false로 해두고 세부 strict옵션들을 하나하나 true로 바꿔 가는 것도 방법이 될 수 있다.
  }
}

타입스크립트 컴파일

ts 파일을 컴파일할 때는 아래 명령어를 입력한다.

npx tsc

그럼 ts 파일에 해당하는 js 파일이 하나 생성된다.

const v1 = 123;
const v2 = () => console.log('123');

위와 같은 ts 파일을 컴파일 하면

"use strict";
var v1 = 123;
var v2 = function () { return console.log('123'); };

위와 같이 변경되는데, 이건 tsconfig.json 에서 target이 es5로 설정되어 있기 때문이다. es6로 변경후 다시 컴파일하면

"use strict";
const v1 = 123;
const v2 = () => console.log('123');

위와 같이 es6 문법들이 사용되어 적용된다.

또한

const v1: number | string = 123;
const v2 = () => console.log('123');

위와 같이 타입 정의를 해도

"use strict";
const v1 = 123;
const v2 = () => console.log('123');

위와 같이 컴파일 결과는 달라지지 않는데, 이는 타입 정보는 컴파일 타임에만 사용되고 결과코드에는 제거된다.

lodash 설치

npm i lodash
npm i @types/lodash 

lodash만 설치했을 때는 타입 정의 파일이 lodash 내부에 없어서 IDE가 타입을 읽어오지 못한다.

이때 DefinitelyTyped에 등록이 된 라이브러리라면 @types/name으로 타입 정보를 받아올 수 있다.

npm i @types/lodash

이걸로 lodash의 타입 정보를 받아오면 VS CODE가 lodash의 타입정보를 읽어올 수 있게 된다.

참고

4. 타입스크립트 실행 방법 및 몇 가지 팁

타입스크립트 실행법: 1. npx tsc

컴파일 -> js 파일 생성 -> node.js로 실행

2.ts 파일 생성

npx tsc 

node 2.js

타입스크립트 실행법: 2. VSC 익스텐션

VSC 익스텐션을 이용하는 방법이 있다.

  1. VSC 익스텐선 code runner 인스톨
  2. npm 파키지 ts-node 다운
npm i ts-node

VSC 설정에서 executorMap 검색 후

Code-runner: Executor Map
Set the executor of each language.

옵션 선택 후
setting.json 파일에 아래 옵션 입력

{
  "code-runner.executorMap": {
    "typescript": "node_modules/.bin/ts-node"
  }
}

이후 실행하고 싶은 타입스크립트 파일로 이동해서 control + option + n 을 클릭하면 실행된다.

타입스크립트 실행법: 3. 타입스크립트의 플레이그라운드

타입스크립트의 플레이그라운드 사이트를 이용하는 것이다.

https://www.typescriptlang.org/play

위 주소로 접속

몇몇 단축키

Auto import -> import하고자 하는 변수 혹은 함수를 입력하고 command + .

또한 한 파일 안에 const로 선언된 동일한 이름의 변수가 있으면 에러가 발생한다.

이때 export {} 를 어느 한 파일 위에 적어주면

타입스크립트는 해당 파일을 모듈로 인식하여 변수의 스코프가 해당 파일로만 제한되게 된다. 따라서 에러가 발생하지 않게 된다.

반응형

'Programming > Typescript' 카테고리의 다른 글

04-생산성을높이는타입스크립트의기능  (0) 2021.11.22
03-타입스크립트고급기능  (0) 2021.11.22
02-타입호환성  (0) 2021.11.22
01-타입정의하기  (0) 2021.11.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함