220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Dynamic Programming
  • REACT
  • 오블완
  • brute-Force
  • top-down
  • implementation
  • 구현
  • dp
  • Priority Queue
  • 프로그래머스
  • Mathematics
  • disjoint set
  • BFS
  • binary search
  • 백준
  • topological sort
  • 티스토리챌린지
  • Prefix Sum
  • Greedy
  • 위상 정렬
  • bitmasking
  • dfs
  • Minimum Spanning Tree
  • Backtracking
  • two pointer
  • simulation
  • IMPLEMENT
  • Lis
  • union-find
  • 다익스트라

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

BackEnd/Node.js

[Node.js / JavaScript] Node.js 개발환경 설정하기 (2) - TypeScript, 그리고 동적 타이핑(Dynamic Typing).

2022. 4. 4. 02:59

Dynamic Typing of JS.

JavaScript는 Dynamically Typed Language. - 동적으로 타입(자료형)이 정의되는 언어이다.

즉, 변수를 선언할 때, 타입(자료형)이 미리 지정되지 않고, 변수에 값이 할당되는 과정에서 자동으로 변수의 타입(자료형)이 결정되는 것이다.

따라서 같은 변수에 여러 자료형의 값을 할당해 줘도 문제가 일어나지 않는데, 예를 들면,

let a = "HI"
console.log(a)
// output : HI
a = 1
console.log(a)
// output : 1
a = "c"
console.log(a)
// output : c
a = "6" + 4
console.log(a)
// output : 64

와 같은 코드들이 정상적으로 작동한다는 거다.

 

그럼 이게 왜 문제냐 하면,

Type checking을 compile 과정에서 미리 거치는 대부분의 다른 언어들과 달리, JavaScript 자체에서는 compile을 거치지 않기 때문에, Type error가 있는 코드를 작성하더라도, 작성 시에는 에러가 나지 않다가, 막상 실제로 실행했을 시점에야 문제가 발생한다는 것이다.

예를 들어 보면,

const aString = "HI"
const output = Math.sqrt(aString)
console.log(output)
// output : NaN

위는 aString에 문자열을 할당하고, output에 aString의 제곱근을 할당하여 그대로 출력하는 코드이다.

당연히 aString은 숫자가 아니므로, 제곱근을 구할 수 없고, NaN(Not-A-Number)가 출력된다.

 

이처럼, 이러한 오류가 발생할 수 있는 위험이 있음에도, 코드를 작성하는 과정에서 이를 알 수 없다는 것이 문제이다.

이런 문제점을 해결하기 위해서 사용하는 것이 바로 TypeScript이다.

 

TypeScript

터미널에 입력하여 TypeScript를 설치해 줍니다.

$ npm i -D typescript
$ npm i -D @types/node

typescript를 설치해 준 이후, node 환경에서 typescript를 사용하려면

@types/node 패키지를 설치해 node에서 사용되는 객체에 대한 타입 정보를 받아와 줘야 함.

 

정상적으로 설치가 되었다면, js파일 코드 맨 위에 //@ts-check 를 입력해 봅시다.

//@ts-check
const aString = "HI"
const output = Math.sqrt(aString)	//이 부분에서 오류가 나는 것을 볼 수 있다.
console.log(output)
// output : NaN

정상적으로 Type Checking이 작동하는 것을 볼 수 있습니다.

 

마지막으로, 폴더에 jsconfig.json 파일을 생성해 줍시다.

그리고 아래와 같은 형식으로 입력합니다.

{
  "compilerOptions": {
    "strict": true
  },
  "include": ["src/**/*"]
}

이 파일의 내용은 vscode에서 TypeScript를 어떤 형식으로 설정하여 적용할 것일지를 결정합니다.

strict는 typescript 검사의 엄격함 정도를, include는 typescript로 검사할 파일을 지정합니다.

상세한 설정은 jsconfig.json Reference 를 확인하고 입력해 주면 됩니다.

    'BackEnd/Node.js' 카테고리의 다른 글
    • [Node.js - Express] Node.js Express로 Firebase Firestore DB와 연동하기 + CRUD
    • [Node.js - Express] 서버가 안 켜지는 에러(Node.js express와 Firebase 연동) - (Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in ~~~)
    • [Node.js] PM2 설치 및 사용 (Node.js 중단 없이 서비스, 코드 변동 시 자동 재시작)
    • [Node.js] Node.js 개발환경 설정하기 (1) - Formatter(Prettier), Linter(ESLint) + Extensions (포매터, 린터 + 여러 확장 프로그램)
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바