TypeScript는 자바스크립트 위에 타입 시스템을 얹어 안정성을 높인 언어로, 마이크로소프트에서 만들었습니다. 코드를 작성할 때 변수와 함수의 타입을 미리 정의할 수 있어, 컴파일 과정에서 잘못된 타입 사용을 바로 검출하고 잠재적인 버그를 사전에 막아줍니다. 뿐만 아니라 에디터가 제공하는 풍부한 코드 완성·리팩터링 기능 덕분에 대규모 애플리케이션 개발에서도 보다 빠르고 안전하게 작업할 수 있다는 장점이 있습니다.
.ts → 트랜스파일 후 .js| 구분 | 동적 타입 (JavaScript) | 정적 타입 (TypeScript) |
|---|---|---|
| 타입 검사 시점 | 런타임 | 컴파일 타임 |
| 에러 발견 시점 | 실행 중 발생 가능 | 사전 방지 |
| 유연성 | 매우 유연 | 엄격한 타입 규칙 적용 |
let x = 123;
x = 'hello'; // 컴파일 에러: 'string'을 'number'에 할당할 수 없음
TypeScript는 구조적 타입 시스템을 사용해, 객체의 프로퍼티 구조(shape)가 호환성을 결정합니다.
interface A { x: number }
interface B { x: number; y: number }
const b: B = { x: 1, y: 2 };
const a: A = b; // OK: B가 A 구조 포함
컴파일러가 코드 문맥을 분석해 타입을 자동으로 유추합니다.
let message = 'hello'; // message: string
function add(a: number, b: number) {
return a + b; // 반환 타입 number
}
async/await나 class 같은 최신 문법을 다운레벨링합니다.npx tsc --project tsconfig.json
.d.ts): 라이브러리를 사용할 때 타입 정보를 바로 확인할 수 있도록 도와주는 선언 파일입니다.interface Point { x: number; y: number }
function printPoint(p: Point) { console.log(`x:${p.x}, y:${p.y}`) }
function identity<T>(arg: T): T { return arg }
const num = identity<number>(42)
const str = identity<string>('hello')
type Success = { ok: true; data: string }
type Failure = { ok: false; error: string }
function handle(res: Success | Failure) {
if (res.ok) console.log(res.data)
else console.error(res.error)
}
type NonNullable<T> = T extends null | undefined ? never : T
type Readonly<T> = { readonly [P in keyof T]: T[P] }
TypeScript 기본 제공 변환
Partial<T>, Required<T>, Pick<T,K>, Omit<T,K> 등type EventName<T extends string> = `on${Capitalize<T>}`;
// "click" → "onClick"
type ReturnType<T> =
T extends (...args: any[]) => infer R ? R : any;
// 함수 타입의 반환 타입을 자동 추출
const config = {
url: 'https://api.example.com',
method: 'GET',
} satisfies RequestOptions;
// config가 RequestOptions 형태를 만족하는지 컴파일 타임에 검증
{
"compilerOptions": {
"target": "ES2022", // 최종 JS 버전
"module": "ESNext", // 모듈 시스템
"strict": true, // 엄격 모드 일괄 적용
"noImplicitAny": true, // 암묵적 any 금지
"strictNullChecks": true, // null/undefined 체크 강화
"declaration": true, // .d.ts 파일 생성
"sourceMap": true, // 디버깅용 소스맵 생성
"esModuleInterop": true, // CommonJS 호환
"skipLibCheck": true // 라이브러리 타입 검사 생략
}
}
strict는 모든 엄격 모드 활성화 (noImplicitAny, strictNullChecks 등)@typescript-eslint 플러그인으로 코드 스타일·타입 검사 동시 관리allowJs, checkJs 옵션으로 조금씩 TS 적용이번 글은 TypeScript 컴파일 파이프라인(파싱 → 타입 체크 → 트랜스파일), 주요·고급 타입 기능, tsconfig 설정 팁까지 한 번에 정리했습니다. 정적 타입 덕분에 코드 안정성이 높아지고, AST 기반 타입 체크와 타입 소거 과정을 거쳐 순수 JS 코드가 생성되는 흐름을 명확히 이해할 수 있었습니디. 선언 파일(.d.ts)을 통해 라이브러리 사용자에게 타입 정보를 제공하는 방식도 확인했습니다.
앞으로는 실제 프로젝트에 작은 단위로 적용해 보며 TypeScript의 이점을 몸소 느껴 보고, 기본 기능에 익숙해진 뒤에는 고급 타입과 설정을 하나씩 도입해 워크플로우를 차근차근 개선해 나갈 예정입니다.