타입스크립트.. 정말 가깝게 느끼자면 가깝지만 막상 적용하지가 쉽지 않은 그것!!
다시한번 도전해 볼까요..!!
타입스크립트란 타입을 가지고 있는 자바스크립트의 슈퍼셋이며, 어떠한 브라우저, 운영체제에서 구동되는 오픈소스입니다.
즉, 자바스크립트의 상위 집합이기 때문에 이전의 자바스크립트, 그리고 이후의 자바스크립트까지 모두 타입스크립트에 포함이 된다고 할 수 있어요!
하지만, 동적인 언어인 자바스크립트와 다르게 자바와 같은 정적언어이기 때문에 컴파일시간에 타입을 검사하며, 컴파일을 해주어야만 하겠죠?
이전과 다음의 자바스크립트를 포함한다는 것을 그림으로 본다면 아래와 같이 표현할 수 있습니다.
정리하자면 타입스크립트란 - 자바스크립트의 모든 문법을 지원하고 컴파일되서 자바스크립트로 만들어지는 정적 프로그래밍 언어입니다.
물론 개발시에 정적언어 vs 동적언어의 속도에는 여러가지 의견들이 갈리고 있어요.
개발당시의 단기간만 생각해본다면 타입지정없이 개발을 하게 된다면 정말 단기간에 개발을 끝낼 수 있다는 장점이 있겠지만,
그와 반대로 장기간적으로 생각해본다면 유지,보수를 포함해서 정적언어가 우위를 가지고 있겠죠?
이부분은 지극히 객관적인 부분이에요..
사실 이전에도 타입스크립트를 리액트 프로젝트에 적극 도입하고 싶어서, 몇번 찾아보고 공부도 해봤지만, 오히려 다음과 같은 불편함만 느낄 수 있었어요.
@types/
를 찾아가면서 해야한다. (이럴거면 npm..을.....)d.ts
가 없을시에 타입스크립트 초보자인 나에게는 너무 난감했다.그럼에도 이번기회에 타입스크립트를 꼭 학습해야겠다고 생각한 이유는 다음과 같은데,
이제 기본적인 타입스크립트의 개념부터 시작해서 리액트에 타입스크립트를 적용시키는 것까지, 한번 시작을 해볼까요 !!!!!!!!!!!
먼저 개발환경 (Node.js)에 typescript를 전역으로 설치해 줍니다.
npm i -g typescript
전역으로 설치를 마치면 터미널에서 tsc 파일명
으로 컴파일을 해줄 수 있습니다.
타입스크립트는 Node.js가 설치되어 있어야만 컴파일 해줄 수 있습니다.
컴파일시 지정한 다양한 옵션들이 적용되어서 .ts파일을 .js파일로 변환시켜주는 마법이죠.
한번 해볼까요?
hello.ts
를 만들고 코드를 쳐줍니다.
타입스크립트는 모든 자바스크립트를 허용하기 때문에 var
과 let
을 모두 사용해 볼게요 .
//hello.ts
var hello = "hello";
let hello2 = "hello";
tsc hello.ts
를 입력하면 다음과 같이 컴파일된 hello.js
파일이 생성될 것입니다.
//hello.js
var hello = "hello";
var hello2 = "hello";
구형브라우저도 지원하기 위해 과거 문법으로 컴파일 된것을 확인할 수 있는데,
이때는 --target
이라는 옵션을 다음과 같이 줄 수 있습니다.
tsc hello.ts --target es6
es6문법으로 컴파일을 부탁해 라는 의미가 되겠죠?
자바스크립트에는 다양한 모듈시스템들이 존재하고 있습니다.
예를 들면 Node.js
에서의 commonjs
프론트엔드쪽에서 자주 사용하는 esm
등이 있겠죠?
타입스크립트에서 이러한 모듈시스템을 지정해서 컴파일 해줄 수 있습니다.
//file1
export default function a(a, b) {
return a + b;
}
====================================
//file2
import add from "./util";
const value = add(1, 2);
console.log(value);
위와같이 export
된 함수 a를 다른파일에서 우리는 아래처럼 esm
방식으로 import
해서 사용할 수 있어요.
그렇다면 컴파일을 해본다면 어떻게 될까요? 일단 --target
은 es2015로 지정이 되어있는 상태입니다.
"use strict";
exports.__esModule = true;
var util_1 = require("./util");
var value = util_1["default"](1, 2);
console.log(value);
export / import
가require()
로 변환된 것을 확인할 수 있는데 이는 es2015가 기본적인 모듈 시스템을commonjs
로 사용하고 있기 때문입니다.
또한 구버전의 node.js
와 같은 경우에는 commonjs
모듈시스템만 지원하기 때문에 es6
로 컴파일하게 된다면 실행이 안될 수 있습니다.
이런 경우에는 tsc hello.ts --target es6 --modul commonjs
를 입력하면 되겠죠.
하지만 모든 옵션들을 명시해서 컴파일을 매번 진행해주는것은 너무나도 비효율적인 작업입니다.
프로젝트의 최상단폴더에 tsconfig.js
파일을 위치시키면 작성한 설정에 의해 컴파일이 됩니다.
{
"include":[
"src/**/*.ts"
],
"exclude":[
"node_modules"
],
"compilerOptions":{
"module":"commonjs",
"rootDir":"src",
"outDir":"dist",
"target":"es5",
”removeComments”: true,
"sourceMap":true,
"noImplicitAny": true,
}
}
"sourceMap":true
은 브라우저에서 ts원본파일을 확인할 수 있습니다.”removeComments”: true,
는 주석을 제거해 줍니다. ”noImplicitAny": true
any설정을 주게되면 에러를 출력해줍니다.다음에는 타입스크립트에서의 변수선언과 기본타입들에 대하여 알아보도록 합시다~~