TypeScript는 JavaScript에 정적 타입(Static Typing)을 더한 슈퍼셋(superset) 언어다. 브라우저는 TS를 그대로 실행하지 못하므로, 타입을 검사한 뒤 타입 표기를 지운 JavaScript로 컴파일된다. 타입 표기는 프로그램의 런타임 동작을 바꾸지 않는다.
- 런타임에 터질 오류를 개발 단계에서 잡는 것이 목적이다. 런타임 검증까지 해 주지는 않으므로 외부 입력은 따로 검증한다(any와 unknown)
- 최신 문법을 예전 JS 버전으로 바꾸는 것을 다운레벨링(Downleveling)이라 하고, 목표 버전은 tsconfig의
target으로 정한다 - 대부분의 타입은 표기하지 않아도 추론된다
- 이름이 아니라 모양으로 호환을 판단하는 구조적 타입 시스템이다
- 요즘 빌드 도구(esbuild, Vite, SWC)는 타입을 지우기만 하고 검사하지 않는다. 검사는 tsc --noEmit로 따로 돌린다
- React에서는 props를 interface로 정의하고,
useState<number>처럼 제네릭으로 상태 타입을 정한다. Node.js는 22.18부터 타입 표기를 지우는 방식(Type Stripping)으로.ts파일을 바로 실행한다. 단, enum처럼 런타임 코드가 생기는 문법은 지원하지 않아tsx같은 도구나tsc컴파일이 필요하다(2026 기준)
둘러보기
- 타입 만들기: 유니언·인터섹션·리터럴 타입 · type과 interface · 유틸리티 타입 · 매핑된 타입과 keyof · 조건부 타입과 infer · 템플릿 리터럴 타입
- 좁히기와 모델링: 타입 좁히기와 타입 가드 · 판별 유니언 · 타입 브랜딩 · satisfies 연산자 · enum과 as const 객체
- 함수·클래스: 함수 오버로드와 시그니처 · TypeScript 클래스 문법 · TypeScript 데코레이터 · 공변성과 반공변성
- 설정·도구: tsconfig 핵심 옵션 · verbatimModuleSyntax와 import type · 선언 파일(.d.ts)과 declare