TypeScript 5 새 기능 — satisfies 연산자와 데코레이터 실전 활용
TypeScript 5의 핵심 신기능 완벽 가이드. satisfies 연산자로 타입 안전성 강화, 새로운 데코레이터 표준 구현, const 타입 파라미터, 다중 설정 파일 확장 등 실무에서 바로 쓸 수 있는 코드 예시 포함.
핵심 요약 TypeScript 5.0~5.4의 주요 신기능: ①
satisfies연산자 — 추론 유지하면서 타입 검증 ② 표준 데코레이터 — TC39 Stage 3 표준 준수, 메타데이터 지원 ③const타입 파라미터 — 리터럴 타입 추론 강화 ④ 다중 tsconfig 확장 ⑤ enum·namespace 개선. 실무에서 가장 파급력 큰 기능은satisfies와 새 데코레이터.

핵심 답변: TypeScript 5의 핵심 기능은 satisfies 연산자와 표준 데코레이터이다.
TypeScript 5 개요
| 항목 | 값 |
|---|---|
| 주요 신기능 | satisfies 연산자, 표준 데코레이터, const 타입 파라미터, 다중 tsconfig 확장, enum·namespace 개선 |
| 실무에서의 파급력 큰 기능 | satisfies, 새 데코레이터 |
| 주요 버전 시작일 | 2023년 3월 |
TypeScript 5는 2023년 3월부터 시작된 주요 버전으로, 5.0~5.4까지 여러 마이너 업데이트가 누적되어 있습니다. 이 버전에서 가장 중요한 변화는 표준 데코레이터와 satisfies 연산자의 도입입니다.
버전별 주요 출시 일정:
| 버전 | 출시 | 주요 기능 |
|---|---|---|
| TypeScript 5.0 | 2023-03 | satisfies, const 타입 파라미터, 다중 tsconfig 확장 |
| TypeScript 5.1 | 2023-06 | getter/setter 독립 타입, JSX 개선 |
| TypeScript 5.2 | 2023-08 | using/await using 키워드, 데코레이터 메타데이터 |
| TypeScript 5.3 | 2023-11 | Import Attributes, 타입 좁히기 개선 |
| TypeScript 5.4 | 2024-03 | NoInfer 유틸리티, 클로저 타입 좁히기 보존 |
1. satisfies 연산자 — 실전 완전 정복

satisfies 연산자는 TypeScript 5.0에서 도입된 가장 혁신적인 기능 중 하나입니다. 기존 타입 단언의 한계를 넘어 타입 추론을 유지하면서 타입 제약을 검증합니다.
기존 문제점
// ❌ 기존 방식의 문제
type Color = "red" | "green" | "blue";
type ColorMap = Record<string, string | number[]>;
// as 단언: 타입 검증 O, 추론 X
const palette = {
red: [255, 0, 0],
green: "#00ff00",
blue: [0, 0, 255]
} as ColorMap;
// 이제 palette.red는 string | number[] 로 추론됨
// .map()을 쓰려면 타입 단언 필요
palette.red.map(x => x); // 오류! string | number[]에 map 없음satisfies 활용
// ✅ satisfies 연산자
type Color = "red" | "green" | "blue";
type ColorMap = Record<Color, string | number[]>;
const palette = {
red: [255, 0, 0],
green: "#00ff00",
blue: [0, 0, 255]
} satisfies ColorMap;
// 이제 타입 검증 O, 리터럴 추론 O
palette.red.map(x => x); // ✅ number[] 유지됨
palette.green.toUpperCase(); // ✅ string 유지됨
const wrong = { purple: "purple" } satisfies ColorMap; // ❌ 오류: "purple"은 Color 아님실전 활용 패턴
패턴 1: API 응답 객체 검증
interface ApiConfig {
baseUrl: string;
timeout: number;
retries: number;
}
// satisfies로 타입 검증 + 정확한 값 추론 유지
const config = {
baseUrl: "https://api.example.com",
timeout: 5000,
retries: 3,
} satisfies ApiConfig;
// config.timeout은 number가 아닌 5000 (리터럴 타입)
type TimeoutType = typeof config.timeout; // 5000패턴 2: 라우트 정의
type Route = {
path: string;
component: React.ComponentType;
auth?: boolean;
};
const routes = [
{ path: "/", component: Home },
{ path: "/dashboard", component: Dashboard, auth: true },
] satisfies Route[];
// routes[0].path는 "/" (리터럴) 유지, Route 검증도 통과패턴 3: 다국어 번역 객체
type TranslationKey = "hello" | "goodbye" | "welcome";
type Translations = Record<TranslationKey, string>;
const ko = {
hello: "안녕하세요",
goodbye: "안녕히 가세요",
welcome: "환영합니다",
} satisfies Translations;
const en = {
hello: "Hello",
goodbye: "Goodbye",
// welcome 누락 → 컴파일 오류 발생! ✅
} satisfies Translations;2. 표준 데코레이터 — TC39 Stage 3 완전 구현

TypeScript 5.0은 오랫동안 사용하던 실험적 데코레이터(experimentalDecorators)와 별개로 TC39 Stage 3 표준 데코레이터를 지원합니다.
핵심 차이점
| 구분 | 실험적 데코레이터 | 표준 데코레이터 (5.0+) |
|---|---|---|
| 활성화 방법 | experimentalDecorators: true | 기본 활성화 (tsconfig 불필요) |
| 표준 준수 | 자체 구현 | TC39 Stage 3 |
| 실행 순서 | 역순 | 정순 |
| 메타데이터 | emitDecoratorMetadata | Symbol.metadata 사용 |
| 함수 지원 | 제한적 | 클래스 전용 |
클래스 데코레이터
// ✅ TypeScript 5 표준 데코레이터
function sealed(target: typeof SealedClass) {
Object.seal(target);
Object.seal(target.prototype);
}
@sealed
class SealedClass {
greet() { return "Hello!"; }
}메서드 데코레이터
function log(target: any, context: ClassMethodDecoratorContext) {
const methodName = String(context.name);
return function (this: any, ...args: any[]) {
console.log(`[${methodName}] 호출됨, 인수:`, args);
const result = target.call(this, ...args);
console.log(`[${methodName}] 반환값:`, result);
return result;
};
}
class Calculator {
@log
add(a: number, b: number): number {
return a + b;
}
}
const calc = new Calculator();
calc.add(1, 2);
// [add] 호출됨, 인수: [1, 2]
// [add] 반환값: 3접근자 데코레이터
function readonly(target: any, context: ClassAccessorDecoratorContext) {
return {
set() {
throw new Error(`${String(context.name)}은 읽기 전용입니다.`);
}
};
}
class Config {
@readonly
accessor version = "1.0.0";
}
const cfg = new Config();
console.log(cfg.version); // "1.0.0"
cfg.version = "2.0.0"; // ❌ 오류 발생데코레이터 메타데이터 (TypeScript 5.2)
// 메타데이터 API 활용
function validate(target: any, context: ClassFieldDecoratorContext) {
context.metadata[context.name] = { required: true };
}
class UserForm {
@validate
name!: string;
@validate
email!: string;
}
// 메타데이터 읽기
const metadata = UserForm[Symbol.metadata];
console.log(metadata); // { name: { required: true }, email: { required: true } }3. const 타입 파라미터

TypeScript 5.0에서 추가된 const 수정자는 제네릭 함수의 타입 추론을 강화합니다.
// ❌ 기존 방식
function identity<T>(value: T): T {
return value;
}
const result = identity(["a", "b", "c"]);
// result: string[] (리터럴 손실)
// ✅ const 타입 파라미터
function identityConst<const T>(value: T): T {
return value;
}
const result2 = identityConst(["a", "b", "c"]);
// result2: readonly ["a", "b", "c"] (리터럴 유지!)실전 활용: 경로 빌더
function createRoute<const Path extends string>(path: Path) {
return { path, url: () => `https://app.example.com${path}` };
}
const homeRoute = createRoute("/");
// homeRoute.path: "/" (리터럴 유지)
const dashRoute = createRoute("/dashboard");
// dashRoute.path: "/dashboard" (리터럴 유지)4. 다중 tsconfig 확장

TypeScript 5.0부터 tsconfig.json의 extends에 배열을 사용할 수 있습니다.
// tsconfig.json
{
"extends": [
"@tsconfig/strictest/tsconfig.json",
"@tsconfig/node18/tsconfig.json",
"./custom.tsconfig.json"
],
"compilerOptions": {
"outDir": "dist"
}
}이전에는 체인 방식으로 여러 파일을 상속해야 했지만, 이제 배열로 한 번에 다중 상속이 가능합니다.
5. using / await using 키워드 (TypeScript 5.2)
자원 관리를 위한 새 키워드로, 자바의 try-with-resources와 유사합니다.
// Symbol.dispose가 있는 객체
cla
---
**참고:** [한국은행 경제통계](https://ecos.bok.or.kr)
## 자주 묻는 질문 (FAQ)
### Q1. TypeScript 5에서 가장 중요한 새 기능은 무엇인가요?
A: satisfies 연산자, 표준 데코레이터, const 타입 파라미터가 실무 영향이 큰 기능입니다.
### Q2. satisfies 연산자는 언제 쓰나요?
A: 객체의 구체적 추론은 유지하면서 특정 타입 조건을 만족하는지 검증할 때 사용합니다.
### Q3. satisfies와 as의 차이는 무엇인가요?
A: as는 타입 단언이고 satisfies는 타입 검증이라 잘못된 구조를 더 안전하게 잡아줍니다.
### Q4. TypeScript 5 데코레이터는 기존과 다른가요?
A: 표준 데코레이터는 TC39 흐름을 따르며 기존 experimentalDecorators와 동작 차이가 있습니다.
### Q5. const 타입 파라미터는 왜 유용한가요?
A: 제네릭 함수에서 리터럴 타입 추론을 보존해 더 정확한 타입을 만들 수 있습니다.
### Q6. TypeScript 5 업그레이드 전 확인할 것은?
A: tsconfig, 데코레이터 사용처, 빌드 도구, ESLint, 라이브러리 타입 호환성을 확인하세요.
## 💡 실전 인사이트
국내 IT 채용 시장에서는 TypeScript가 이미 선택 기능이 아니라 기본 역량에 가깝습니다. 2024년 Stack Overflow Developer Survey 기준 TypeScript 사용률은 38.5%로 JavaScript 다음 축을 형성했고, 국내 프론트엔드·Node.js 공고에서도 React, Next.js, NestJS와 함께 요구되는 비율이 높습니다. 타 블로그는 `satisfies`를 문법 소개로 끝내지만, 실제 프로젝트에서는 메뉴 권한표, 라우트 매핑, i18n 키처럼 “값은 좁게 유지하고 구조는 강제”해야 하는 객체에서 버그를 줄이는 효과가 큽니다. 필자 경험상 10명 안팎의 팀은 마이그레이션 후 1~2개월 안에 `as` 단언 사용량을 20~30% 줄이는 것이 현실적인 1차 목표입니다. 데코레이터는 NestJS나 Angular처럼 메타프로그래밍 의존도가 높은 코드부터 적용 범위를 정하고, 기존 `experimentalDecorators`와 표준 데코레이터를 한 번에 섞지 않는 것이 비용을 줄이는 핵심입니다.
## FAQ
### Q1. TypeScript 5 새 기능 — satisfies 연산자와 데코레이터 실전 활용를 볼 때 가장 먼저 확인할 것은 무엇인가요?
핵심은 조건을 한 번에 판단하지 않고 목적, 비용, 위험, 실행 순서로 나누는 것입니다. 이 네 가지를 분리하면 과장된 주장이나 단편적인 숫자에 흔들릴 가능성이 줄어듭니다.
### Q2. 초보자는 어떤 실수를 가장 자주 하나요?
가장 흔한 실수는 한 가지 지표만 보고 결론을 내리는 것입니다. 실제 결정 전에는 기준값, 예외 상황, 본인 조건, 대체 선택지를 함께 확인해야 합니다.
### Q3. 바로 실행해도 되는 기준은 무엇인가요?
필요한 정보가 충분하고 손실 가능 범위가 작으며 되돌릴 수 있는 선택이면 작게 실행해볼 수 있습니다. 반대로 비용이 크거나 법률, 세금, 건강, 투자와 관련되면 추가 확인이 필요합니다.
### Q4. 비교할 때 우선순위는 어떻게 잡나요?
먼저 본인에게 직접 영향을 주는 항목을 고릅니다. 그다음 비용, 시간, 유지관리, 실패했을 때의 손실을 비교하면 실제 선택에 가까운 결론을 만들 수 있습니다.
### Q5. 이 글의 체크리스트는 언제 다시 봐야 하나요?
조건이 바뀌었거나 새로운 가격, 정책, 규정, 시장 상황이 나온 경우 다시 확인해야 합니다. 특히 2026년 기준 정보는 업데이트 주기를 함께 보는 편이 안전합니다.
### Q6. 최종 판단 전에 남겨야 할 기록은 무엇인가요?
비교한 기준, 참고한 날짜, 선택 이유, 보류한 이유를 짧게 기록해두면 나중에 같은 결정을 반복할 때 시간을 줄일 수 있습니다.
## 실전 적용 체크리스트
| 확인 항목 | 왜 필요한가 | 바로 할 일 |
|---|---|---|
| 내 상황의 입력값 | 같은 주제라도 소득, 기간, 지역, 목적에 따라 결론이 달라집니다. | 숫자나 조건을 먼저 적습니다. |
| 비교 기준 | 단일 결론보다 여러 선택지를 비교해야 실수가 줄어듭니다. | 비용, 시간, 위험, 재확인 주기를 나눕니다. |
| 행동 단위 | 읽고 끝나는 글은 체류는 길어도 재방문 이유가 약합니다. | 오늘 확인할 항목 1개를 정합니다. |
| 재검토 시점 | 세금, 금리, 플랫폼 정책, 건강 기준은 바뀔 수 있습니다. | 다음 확인 날짜를 메모합니다. |
## 관련 도구로 바로 확인하기
| 도구 | 링크 | 활용법 |
|---|---|---|
| 페이지 속도 점검 | [바로 열기](/tools/page-speed) | 입력값을 바꿔 결과를 비교합니다. |
| 메타태그 체크 | [바로 열기](/tools/meta-checker) | 입력값을 바꿔 결과를 비교합니다. |
| DNS 조회 | [바로 열기](/tools/dns-lookup) | 입력값을 바꿔 결과를 비교합니다. |
| JSON 포맷터 | [바로 열기](/tools/json-formatter) | 입력값을 바꿔 결과를 비교합니다. |
## 이 글을 읽은 뒤 이어서 볼 페이지
- [페이지 속도 점검](/tools/page-speed)
- [메타태그 체크](/tools/meta-checker)
- [SEO 허브](/hubs/seo)
- [도구 모음](/tools)
## TypeScript 5 새 기능 — satisfies 연산자와 데코레이터 실전 활용 FAQ 보강
### Q. 이 글의 내용을 그대로 따라도 되나요?
A. 그대로 복사하기보다 본인의 금액, 일정, 지역, 목적을 먼저 대입해야 합니다. 조건이 달라지면 우선순위도 달라집니다.
### Q. 가장 먼저 확인할 기준은 무엇인가요?
A. 결과를 크게 바꾸는 입력값부터 확인하는 것이 좋습니다. 세금은 금액과 기간, 금융은 수수료와 금리, 기술 글은 배포 환경과 유지보수 비용이 우선입니다.
### Q. 관련 도구를 같이 쓰는 이유는 무엇인가요?
A. 글만 읽으면 판단이 추상적으로 끝날 수 있습니다. 계산기와 점검 도구를 같이 쓰면 숫자와 조건을 직접 바꿔 보면서 더 현실적인 결론을 얻을 수 있습니다.🔧 이 글과 관련된 무료 도구
다음에 바로 해볼 것
이 글에서 바로 이어가기
관련 글
RTX 5070과 RTX 5080을 AI 학습 관점에서 VRAM, Tensor 성능, 전력, 예산, LoRA 활용까지 비교한 실전 구매 가이드입...
IT2026 ChatGPT vs Claude vs Gemini — AI 챗봇 성능·가격·활용법 비교2026 ChatGPT vs Claude vs Gemini — AI 챗봇 성능·가격·활용법 비교을(를) 통해 IT를 빠르게 정리하면 실무 적용 ...
ITChatGPT vs Claude vs Gemini 2026 비교 — 실무 생산성 테스트 10가지ChatGPT vs Claude vs Gemini 2026 비교 — 실무 생산성 테스트 10가지 기반 IT 핵심 가이드 핵심 개념·실행 단계·검...
IT2026 최고의 VPN 비교 — NordVPN vs ExpressVPN vs Surfshark 실사용 리뷰2026 최고의 VPN 비교 — NordVPN vs ExpressVPN vs Surfshark 실사용 리뷰 기반 IT 핵심 가이드 핵심 개념·실...