전체 목록
TypeScriptHard#138

satisfies 연산자는 타입 단언(as)과 어떻게 다른가요?

#TS#satisfies#타입추론#타입단언

답변 포인트

검증과 타입 추론 보존 여부를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

satisfies는 값이 특정 타입을 만족하는지 검사하면서 원래의 구체적 추론을 보존합니다. as는 컴파일러에게 타입을 믿으라고 지시하므로 잘못 쓰면 오류를 숨길 수 있습니다.

satisfies는 값이 특정 타입을 만족하는지 검사하면서 원래의 구체적 추론을 보존합니다. as는 컴파일러에게 타입을 믿으라고 지시하므로 잘못 쓰면 오류를 숨길 수 있습니다.

핵심 개념

핵심 기준은 검증과 타입 추론 보존 여부입니다. 이 개념은 단순한 용어가 아니라, 실제 코드나 시스템에서 반복적으로 생기는 문제를 다루기 위해 등장했습니다.

TypeScript는 런타임 전에 실수를 발견하고 코드의 의도를 타입으로 문서화하기 위해 사용합니다. 좋은 타입은 자동완성, 리팩터링, 협업 안정성을 높여줍니다.

동작 흐름

  1. 먼저 어떤 문제가 있는지 확인합니다.
  2. 이 개념이 그 문제를 어떤 기준으로 나누거나 해결하는지 봅니다.
  3. 실제 코드에서는 입력, 상태, 실행 순서, 비용이 어떻게 바뀌는지 확인합니다.
  4. 마지막으로 한계와 부작용을 함께 점검합니다.

실제 예시

TypeScript
const routes = {
  home: "/",
  user: "/users/:id",
} satisfies Record<string, string>;

// routes.home은 여전히 구체적인 문자열 리터럴로 추론됩니다.

satisfies는 구조를 검증하면서 값 자체의 구체적인 추론을 보존합니다.

실무에서 주의할 점

  • 타입 단언으로 오류를 덮기보다 타입을 좁히는 코드를 먼저 고려합니다.
  • 런타임 검증이 필요한 외부 입력은 타입만으로 안전해지지 않습니다.
  • 공개 타입은 너무 구체적이어도, 너무 느슨해도 유지보수가 어려워집니다.

함께 연결해서 보면 좋은 키워드

TS, satisfies, 타입추론, 타입단언

정리

한 줄로 정리하면, satisfies는 값이 특정 타입을 만족하는지 검사하면서 원래의 구체적 추론을 보존합니다. as는 컴파일러에게 타입을 믿으라고 지시하므로 잘못 쓰면 오류를 숨길 수 있습니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.

satisfies와 as의 차이

as는 타입 단언으로, 컴파일러의 판단을 개발자가 덮어쓰는 기능입니다. satisfies는 값의 실제 타입은 보존하면서 특정 타입 조건을 만족하는지 검사합니다.

TypeScript
type Route = Record<string, { path: string; auth: boolean }>;

const routes = {
  home: { path: '/', auth: false },
  admin: { path: '/admin', auth: true },
} satisfies Route;

routes.admin.auth; // boolean이지만 key home/admin 정보는 보존

as의 위험

TypeScript
const value = { name: 'Kim' } as { name: string; age: number };
console.log(value.age.toFixed()); // 컴파일은 되지만 런타임 오류

언제 satisfies를 쓰나?

  • 설정 객체가 특정 구조를 만족하는지 검사하고 싶을 때
  • literal 타입 정보를 잃고 싶지 않을 때
  • as const와 함께 정확한 key/value 추론을 유지하고 싶을 때

satisfies는 값을 변환하지 않습니다. 런타임 검증도 아니므로 외부 입력 검증에는 zod 같은 도구가 필요합니다.

관련 질문

같은 카테고리/태그 기준