
📅 2025-11-25
➡️ TypeScript에 대해 새롭게 알게 된 것 또는 헷갈리는 부분 정리
nullundefinedbooleanstringnumber 등| 특징 | JavaScript | TypeScript |
|---|---|---|
| 타입 시스템 | 동적 타입 | 정적 타입 |
| 컴파일 | 필요 없음 | JavaScript로 컴파일 필요(프로젝트가 대형화 되면 컴파일 시간이 길어짐) |
| 개발 경험 | 유연하고 빠르게 시작 가능 | 코드 완성, 타입 검사 등으로 향상된 개발 경험 |
| 프로젝트 규모 | 작은 프로젝트에 적합 | 대규모 프로젝트에 적합 |
| 런타임 오류 | 런타임에 타입 오류 발견 가능 | 컴파일 타임에 타입 오류 발견 가능 |
| 학습 곡선 | 낮음 | 높음 |
| 도구 지원 | 광범위한 도구와 라이브러리 지원 | JavaScript 생태계의 모든 도구와 라이브러리 지원 |
| 브라우저 지원 | 모든 브라우저에서 기본적으로 지원 | 트랜스파일된 JavaScript가 모든 브라우저에서 지원 |

컴파일 시작
tsc 실행 → tsconfig.json 설정 기반으로 컴파일 시작파일 로드
import된 파일 로드코드 분석
심볼 테이블 생성
자바스크립트 코드로 변환
타입 검사
중요한 건,
function sum(a + b){
return a + b;
}
sum('10', '20'); // "1020"의도치 않은 결과 값을 받을 수 있음
function sum(a: number, b: number) {
return a + b;
}
sum('10', '20'); // Error: '10'은 number에 할당될 수 없음
npm install -g typescript
# 또는
yarn global add typescript
npm create vite
React + TypeScript 템플릿을 선택하면 자동으로 .tsx 파일 구조와 tsconfig.json이 설정됨src/main.tsx,src/App.tsxtsconfig.jsontarget: 변환할 ECMAScript 버전 지정"target": "es6"module: 모듈 시스템 지정"module": "esnext"strict: 모든 엄격한 타입 검사 활성화"strict": trueoutDir: 컴파일된 파일의 출력 디렉터리를 지정"outDir": "./dist"rootDir: 입력 파일의 루트 디렉터리를 지정"rootDir": "./src"
stringnumberbooleanobjectarraytupleenumnullnundefinedanyvoidnever: 타입과 같은 형태로 타입 지정let str: string;
let red: string = 'Red';
let green: string = 'Green';
let myColor: string = `My color is ${red}`;
let yourColor: string = 'Your color is ' + green;let num: number;
let integer: number = 6;
let float: number = 3.14;
let hex: number = 0xf00d; // 61453
let binary: number = 0b1010; // 10
let octal: number = 0o744; // 484
let infinity: number = Infinity;
let nan: number = NaN;true/false 값인 경우let isBoolean: boolean;
let isLoggedIn: boolean = false;let user: object = {
name:"홍길동",
age:20
};let arr: number[] = [1,2,3];
let arr1: Array<number> = [1,2,3] //제네릭let arr: [string, number] = ["hi", 10];기본적으로 0부터 시작하며 값은 1씩 증가
enum Week {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
enum Color {
Red = 'red',
Green = 'green',
Blue = 'blue'
}
let str: any = 'hi';
let num: any = 10;
let arr: any = ['a', 2, true];return이 없거나 return이 있더라도 반환하는 값이 없다면 함수의 반환 타입을 void로 지정function printA(): void{
console.log("aaa");
}
function returnEmpty(): void{
return;
}function error(message: string): never {
throw new Error(message)
}타입스크립트에서의 함수는 3가지 타입을 정의할 수 있음
function sum(a, b) {
return a + b;
}function sum(a: number, b: number): number {
return a + b;
}const sum = (a: number, b: number): number => a + b;함수의 매개 변수를 설정하면 undefined나 null이라도 인자로 넘겨야 함
function sum(a: number, b: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // error, too few parameters
function sum(a: number, b="100"): number {
return a + b;
}
sum(10, undefined); // 110
sum(10, 20, 30); // error, too many parameters
sum(10);undefined를 넘기면 기본값 사용null을 넘기면 그대로 null?)를 붙이면 선택적 매개변수가 되어 생략이 가능해짐function sum(a: number, b?: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // 타입 에러 없음function sum(a: number, ...nums: number[]): number {
const totalOfNums = 0;
for (let key in nums) {
totalOfNums += nums[key];
}
return a + totalOfNums;
}