TypeScript satisfies — 더 안전한 타입 체크
1. satisfies란?
satisfies는 TypeScript 4.9에서 추가된 새로운 타입 검증 연산자입니다.
“이 값이 특정 타입 규칙을 지키는지 확인만 해” 라는 의미로,
as처럼 강제 변환하지 않고 엄격하게 검사합니다.
2. 왜 필요할까?
기존에 많이 쓰던 as는 타입 강제 변환이라서
규칙에 맞지 않아도 억지로 통과시켜버릴 수 있습니다.
그 결과, 런타임에서 예상치 못한 버그가 터질 수 있죠.
type Person = { name: string; age: number };
const p1 = {
name: "Alice",
age: "25", // ❌ 문자열인데도...
} as Person; // 🚨 에러 없이 통과 (위험!)
3. satisfies 예시
satisfies를 쓰면 타입을 바꾸지 않고 규칙 위반 시 컴파일 에러를 냅니다.
const p2 = {
name: "Alice",
age: "25", // ❌ 문자열이라서 에러
} satisfies Person;
// ✅ "age" 속성이 number여야 한다고 알려줌
4. 특징 정리
강제 변환이 아님 → 타입 정보 보존
더 엄격함 → 틀리면 바로 에러
런타임 영향 없음 → 전부 컴파일 단계에서만 동작
주로 객체 리터럴 검증이나 타입 안전한 리팩토링에 유용
5. as vs satisfies 차이
구분 as satisfies
역할 타입 강제 변환 타입 검증
잘못된 타입 통과 여부 가능(위험) 불가능(엄격)
타입 정보 유지 변환 후 변형될 수 있음 그대로 유지
사용 목적 타입 강제 지정 타입 구조 검증
6. 실무에서 어떻게 쓰나?
type RealEstatePagination = { content: RealEstate[]; totalPages: number; };
const formattedData = {
content: [...],
totalPages: 3,
} satisfies RealEstatePagination;
// → 구조가 맞는지 체크하고, 틀리면 컴파일 에러
API 응답 객체
설정 파일 (config)
상수 데이터
같이 형태가 고정되어야 하는 값에 특히 유용합니다.
📌 결론
as = 타입 바꿔치기 (느슨, 위험할 수 있음)
satisfies = 타입 지키기 (엄격, 안전)
TypeScript 4.9 이상에서 사용 가능
타입 안전성 높이고 싶은 곳에 적극 활용 추천