노트

TypeScript 개요

TypeScript

프런트엔드#ts · 연결된 개념 23개

쉽게 말하면

TypeScript는 자바스크립트에 '이 변수엔 숫자만' 같은 타입 규칙을 적어 두고, 실행하기 전에 규칙 위반을 찾아내는 언어예요. 글을 내기 전에 맞춤법 검사기를 돌려 오타를 잡는 것과 비슷하죠.

비유가 깨지는 곳 맞춤법 검사기가 글 내용을 바꾸지 않듯 타입 표기는 런타임 동작을 바꾸지 않고 컴파일하면 지워져요. 그래서 실행 중에 들어오는 외부 입력은 따로 검증해야 해요.

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 기준)

둘러보기

연결된 개념

이 노트를 가리키는 문서

아직 없습니다.

뜻이 가까운 노트

  • 기본형 집착

    전화번호·금액·우선순위 같은 도메인 개념을 끝까지 문자열이나 숫자로만 다루는 냄새. 같은 검증과 포맷 코드가 여기저기 반복되고, 문자열로 모든 걸 표현하는 "stringly typed" 코드가 된다.

보기 옵션