satisfies(TypeScript 4.9+)는 값이 어떤 타입을 만족하는지 검사하되, 값에서 추론된 구체적인 타입은 그대로 유지하는 연산자다.
| 방식 | 타입 검사 | 구체적 추론 유지 |
|---|---|---|
const x: T = … | ✅ | ❌ (T로 넓어짐) |
| 표기 없음 | ❌ | ✅ |
const x = … satisfies T | ✅ | ✅ |
type Colors = Record<string, string | [number, number, number]>
const a: Colors = { red: [255, 0, 0] }
a.red.map(v => v * 2) // ❌ string | 튜플로 넓어져 map을 모름
const b = { red: [255, 0, 0], green: '#0f0' } satisfies Colors
b.red.map(v => v * 2) // ✅ 튜플로 남아 있음- 설정 객체·라우트 표처럼 "키와 값 모양은 규칙대로 강제하고, 쓸 때는 정확한 타입이 필요한" 곳에 맞는다
as const satisfies T로 리터럴 타입까지 고정하면서 모양을 검사할 수 있다as T(타입 단언, Type Assertion)는 검사를 우회해 거짓말을 허용하지만,satisfies는 틀리면 에러를 낸다
배경은 타입 추론과 타입 검사, 상수 객체를 유니언으로 바꾸는 패턴은 매핑된 타입과 keyof·enum과 as const 객체 참고.