2025년 2월 21일
타입스크립트 코드 작성 후, 컴파일 과정을 거쳐 자바스크립트 코드로 변환하는 과정을 실행해 보았음
타입스크립트의 컴파일 과정에서 우리가 작성한 코드의 오류를 검사하고, 오류가 없으면 자바스립트 코드로 변환하는데, 이러한 컴파일 과정에서 세부적인 상황들을 설정할 수 있음 -> 옵션 설정 가능
타입스크립트는 다른 언어들에 비해 컴파일러 옵션을 자유롭고 쉽게 설정할 수 있음 (실무에서 진행하는 프로젝트의 성격에 따라 설정해서 사용함)
타입스크립트 컴파일러 옵션은 node.js 패키지 단위로 설정할 수 있음 (프로젝트마다 설정 가능)
저번 시간에 살펴본 tsc 도구를 사용하면 기본적인 옵션이 다 자동으로 설정된 컴파일러 옵션 파일을 자동으로 만들 수 있음 -> tsconfig.json 파일 생성됨
tsc --init
tsconfig.json : typescript configuration. 타입 스크립트 컴파일러의 설정 파일
대부분 주석처리 되어있으며, 옵션을 바꾸면 tsc의 동작이 바뀜
{
"include" : ["src"]
}
{
"compilerOptions" : {
"target" : "ESNext"
},
"include" : ["src"]
}
변환되는 자바스크립트 코드의 모듈 시스템 설정 옵션
자바스크립트의 모듈 시스템은 CJS 모듈과 ES 모듈 시스템이 있음
참고1: CJS와 ES
참고2: 모듈과 ES모듈
{
"compilerOptions" : {
"target" : "ESNext",
"module" : "ESNext" // ES모듈 (CJS모듈: CommonJS)
},
"include" : ["src"]
}
컴파일 결과 생성될 자바스크립트 파일들이 어디에 위치할지 설정하는 옵션
dist 라는 폴더 안에 자바스크립트 파일들이 위치하도록 설정하고 싶음
{
"compilerOptions" : {
"target" : "ESNext",
"module" : "ESNext",
"outDir" : "dist"
},
"include" : ["src"]
}
{
"compilerOptions" : {
"target" : "ESNext",
"module" : "ESNext",
"outDir" : "dist",
"strict" : true
},
"include" : ["src"]
}
자바스크립트에서는 파일들이 개별적으로 모듈로 취급받기 때문에 파일별로 동일한 변수를 작성해도 전혀 문제가 되지 않았음
그런데 타입스크립트는 기본적으로 모든 타입스크립트 파일을 전역 모듈로 봄 -> 이 말은, 전역적인 공간에 같이 있다고 생각함(모두다 같은 공간에 있다고 생각함)
const a = 1;
export { a };
{
"compilerOptions" : {
"target" : "ESNext",
"module" : "ESNext",
"outDir" : "dist",
"strict" : true,
"moduleDetection" : "force"
},
"include" : ["src"]
}
{
"compilerOptions" : {
"target" : "ESNext",
"module" : "ESNext",
"outDir" : "dist",
"strict" : true,
"moduleDetection" : "force",
"skipLibCheck": true
},
"include" : ["src"]
}
{
"type" : "module"
}
동시에 딱 하나의 값만 저장할 수 있는 타입
배열이나 객체는 여러개의 값을 저장할 수 있음
// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let num7: number = NaN;
num1.toFixed();
// string
let str1: string = 'hello';
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${num1}`;
str1.toUpperCase();
// boolean
let bool1: boolean = true;
let bool2: boolean = false;
// null
let null1: null = null;
// undefined
let unde1: undefined = undefined;
// 리터럴 타입
// 리터럴 -> 값
let numA: 10 = 10;
numA = 10; // 10만 넣을 수 있음
let strA: 'hello' = 'hello';
let strA: 'hello' = 'hi'; // 오류 발생
let boolA: true = true;
let boolA: true = false; // 오류 발생
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"outDir": "dist",
"strict": true,
"strictNullChecks": false,
"moduleDetection": "force",
"skipLibCheck": true
},
"include": ["src"]
}
타입스크립트에서는 number나 string처럼 여러개의 값을 포함하는 타입 뿐만 아니라, 딱 하나의 값만 포함하는 타입이 있음