Files

36 lines
4.5 KiB
Markdown

---
id: P-REINFORCE-AUTO-5B3851
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - satisfies Keyword"
---
# [[satisfies Keyword|satisfies Keyword]]
## 📌 한 줄 통찰 (The Karpathy Summary)
> `satisfies` 키워드는 TypeScript 4.9에 도입된 기능으로, 객체가 특정 타입의 구조적 요구 사항을 준수하는지 검증하면서도 해당 객체 속성들의 구체적인 리터럴 타입(Literal Type)을 그대로 보존하는 역할을 합니다[1-3]. 기존의 타입 어노테이션(`:`)이 구체적인 타입을 일반적인 타입으로 넓혀(Widening) 정밀도를 떨어뜨리거나, 타입 단언(`as`)이 컴파일러의 검증을 우회하여 런타임 에러를 유발할 수 있는 단점들을 모두 해결합니다[4-6]. 이를 통해 개발자는 엄격한 타입 검사와 정밀한 타입 추론의 이점을 동시에 누릴 수 있습니다[1, 7].
## 📖 구조화된 지식 (Synthesized Content)
* **도입 배경 및 핵심 기능:** 기존 TypeScript에서는 변수에 타입 어노테이션(`:`)을 지정하면 특정한 문자열 리터럴 값이 포괄적인 `string` 타입 등으로 넓혀지는 문제(Widening)가 발생했습니다[4, 8]. 반면 타입 단언(`as`)은 "내가 컴파일러보다 더 잘 안다"는 전제로 작동하여 속성 누락이나 초과를 제대로 검증하지 않습니다[5, 9]. `satisfies` 연산자는 대상 객체가 지정된 인터페이스나 타입에 부합하는지 엄격히 검사하면서도, 컴파일러가 유추한 속성의 구체적인 값을 잃지 않게 보존합니다[1-3, 6].
* **과잉 속성 검사(Excess Property Checking)와 엄격성 강제:** TypeScript의 구조적 타이핑(Structural Typing) 환경에서는 요구되는 속성만 존재하면 추가적인 속성이 있어도 타입이 호환되는 것으로 간주됩니다[10, 11]. 하지만 백엔드 데이터를 프론트엔드 모델로 매핑하는 등의 상황에서 `satisfies`를 사용하면, 대상 타입에 정의된 속성만이 안전하게 매핑되도록 강제하여 오타나 의도치 않은 잉여 속성을 컴파일 타임에 효과적으로 잡아냅니다[12-14].
* **주요 활용 패턴:**
* **`as const`와의 결합:** `as const satisfies Type` 형태로 사용하면 컴파일 타임의 타입 검증과 런타임의 불변성(Immutability)을 동시에 확보할 수 있습니다[15]. 이는 절대 변경되어서는 안 되는 설정(Configuration) 객체나 룩업(Lookup) 테이블을 정의할 때 완벽한 패턴입니다[7, 15, 16].
* **식별 가능한 유니온(Discriminated Unions) 보존:** 식별 가능한 유니온 타입과 함께 사용할 때 판별자(Discriminator)의 리터럴 타입을 유지해주어, 이후 조건문이나 `switch` 문 등에서 정확한 타입 좁히기(Type Narrowing) 및 완전성 검사(Exhaustiveness Checking)가 가능해집니다[8, 16, 17].
* **유연성과 안전성의 결합:** `satisfies`는 객체의 필수 속성들을 올바른 타입으로 가지고 있는지 검증하면서도, 타입에 명시되지 않은 추가 속성을 포함하는 것을 차단하지 않아 확장성 있는 객체 구조를 유지할 수 있게 해줍니다(단, 기본 타입 속성명과 비슷한 오타가 발생하면 에러로 포착합니다)[2, 7, 18, 19].
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
## 🔗 지식 연결 (Graph)
- **Related Topics:** Type Annotation, [[타입 단언(Type Assertion)|Type Assertion]], [[Excess Property Checking|Excess Property Checking]], [[Discriminated Unions|Discriminated Unions]], Literal Type, [[Structural Typing|Structural Typing]]
- **Projects/Contexts:** [[TypeScript 4.9|TypeScript 4.9]], Data Mapping and Transformation
- **Contradictions/Notes:** TypeScript의 타입 단언(`as`)은 초과 속성이나 잘못된 매핑에 대한 검사를 수행하지 않아 조용한 런타임 에러를 유발할 수 있지만, `satisfies` 키워드는 구조적 타이핑의 유연성을 허용하면서도 지정된 타입에 대해 엄격한 검증(Excess property checks 등)을 수행하므로 타입 캐스팅의 훌륭한 대안이 됩니다[3, 9, 14].
---
*Last updated: 2026-04-18*
- Raw Source: 00_Raw/2026-04-20/satisfies Keyword.md
---