2. 타입스크립트의 동작 원리
컴파일: 사람이 작성한 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정
AST(추상 문법 트리): 코드 공백, 주석 등 코드 실행에 관계없는 요소를 전부 제거하고 트리 형태의 자료구조에 코드를 저장해 놓은 형태의 트리
타입스크립트의 동작 과정
- 타입스크립트 코드를 AST로 변환
- AST를 확인하면서 코드 상 타입오류가 없는지 점검
- 타입에 오류가 있었다면 타입 검사 실패 및 컴파일 중단
- 타입에 오류가 없다면 타입 검사 통과
- AST를 자바스크립트 코드로 변환
- 컴파일 종료
- 타입에 오류가 있는 경우 컴파일 시 타입 검사를 통과할 수 없음 👉 컴파일로 변환된 자바스크립트는 타입 관련한 에러가 없는 안전한 코드
- 타입스크립트의 타입 관련 코드는 자바스크립트로 변환될 때 사라짐 👉 실제 프로그램 실행에 영향을 미치지 않음
3. Hello TS World
1️⃣ 실습 폴더 생성
2️⃣ 필요한 라이브러리 및 패키지 설치
- Node.js 패키지 초기화
npm init
-@types/node (Node.js 내장 기능들의 타입 정보를 담고 있는 패키지) 설치
npm i @types/node
- tsx (단 한 번의 명령어로 타입스크립트 코드를 실행시켜 주는 도구) 설치
npm i -g tsx
- 타입스크립트 컴파일러(TSC: 타입스크립트를 컴파일하기 위한 패키지) 설치
npm i -g typescript
3️⃣ 타입스크립트 실행
tsx index.ts
4. 타입스크립트 컴파일러 옵션 설정하기
컴파일러 옵션
컴파일 과정의 세부 사항 (얼마나 엄격하게 타입 오류 체크할 건지 컴파일 결과 생성된 js 코드 버전은 어떻게 할 건지 등등)
컴파일러 옵션 자동 생성
tsc --init
컴파일러 옵션 직접 설정하기
😀 include 옵션
tsc에게 컴파일할 타입스크립트 파일의 범위와 위치를 알려주는 옵션
{
//"include": ["src"]
"include": ["./"]
}
👉 tsc 명령어만 입력해도 src 폴더 아래의 모든 타입스크립트 파일이 동시에 컴파일된다
👉 나의 경우 루트 폴더 바로 아래 코드가 들어있으므로 src 폴더가 없다. 따라서 `./`로 경로를 지정해 주었다.
tsc
😀 target 옵션
컴파일 결과 생성되는 js 코드의 버전을 설정하는 옵션
{
"compilerOptions": {
"target": "ESNext"//최신 js 버전
},
"include": ["./"]
}
ES5문법으로 컴파일 후 결과를 확인하면 ES6문법으로 자바스크립트 코드가 변경된다.
😀 module 옵션
변환되는 자바스크립트 코드의 모듈 시스템을 설정하는 옵션
1. <module: CommonJS>
tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "CommonJS"
},
"include": ["./"]
}
hello.ts
export const hello = () => {
console.log("hello");
};
index.ts
import { hello } from "./hello";
console.log(hello);
이후 tsc로 컴파일하면, `require` 및 `exports` 등을 사용하는 CommonJS 문법으로 코드가 변환된 것을 확인할 수 있다.
👇
index.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hello_1 = require("./hello");
console.log(hello_1.hello);
2. <module: ESNext>
tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext" //최신버전으로 변경
},
"include": ["./"]
}
module을 최신값으로 변경하고 tsc를 실행하면
👇
index.js
import { hello } from "./hello";
console.log(hello);
ES 모듈 시스템을 사용하도록 코드가 변경되었다.
😀 outDir 옵션
컴파일 결과 생성할 자바스크립트 코드의 위치를 결정하는 옵션
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"outDir": "dist"
},
"include": ["./"]
}
tsc로 컴파일하면 결과가 dist 폴더에 생성된다.
😀 strict 옵션
타입스크립트 컴파일러의 타입 검사 엄격함 수준을 정하는 옵션
{
"compilerOptions": {
...
"strict": true
},
"include": ["./"]
}
ex) 매개변수의 타입을 지정하지 않았을 시 빨간 줄 에러가 뜬다. strict를 설정하지 않을 시 에러가 발생하지 않는다.
😀 ModuleDetection 옵션
타입스크립트의 모든 파일은 기본적으로 전역 파일(모듈) 취급을 받는다.
따라서 a.ts 파일과 b.ts 파일에서 동일 이름의 변수를 선언하면 오류가 발생한다.
// a.ts
const a = 1; // ❌
// b.ts
const a = 1; // ❌
이럴 때는 각 파일에 모듈 시스템 키워드(export, import)를 최소 한 개 이상 사용해 해당 파일이 전역 모듈이 아닌 로컬(독립) 모듈 취급받도록 해주어야 한다. 이러한 기능을 가진 옵션이 바로 ModuleDetection이다.
{
"compilerOptions": {
...
"moduleDetection": "force"
},
"include": ["./"]
}
- force: 자동으로 모든 타입스크립트 파일을 로컬 모듈(독립 모듈)로 취급받게 처리한다. (=모든 타입스크립트 파일(.ts)에 export 키워드를 자동으로 추가하여 격리된 모듈로 취급되도록 만든다.)
출처
소개 - 한 입 크기로 잘라먹는 타입스크립트
한 입 크기로 잘라먹는 타입스크립트
ts.winterlood.com
한 입 크기로 잘라먹는 타입스크립트(TypeScript) | 이정환 Winterlood - 인프런
이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻♀️로 만들어드립니다., 프론
www.inflearn.com