전체 목록
TypeScriptHard#412

TypeScript의 satisfies 연산자는 as 타입 단언과 어떻게 다르며 언제 유용한가요?

#TypeScript#satisfies#타입추론#타입안전성

답변 포인트

값의 실제 타입 추론을 보존하면서 구조 검사를 하고 싶은 상황을 생각해보세요.

정답 및 해설

빠른 요약

`satisfies`는 값이 특정 타입 조건을 만족하는지 검사하면서도, 값 자체의 구체적인 타입 추론은 최대한 보존합니다. 반면 `as`는 개발자가 컴파일러에게 “이 타입이라고 믿어”라고 말하는 단언에 가깝기 때문에 잘못 쓰면 타입 오류를 숨길 수 있습니다.

satisfies는 값이 특정 타입 조건을 만족하는지 검사하면서도, 값 자체의 구체적인 타입 추론은 최대한 보존합니다. 반면 as는 개발자가 컴파일러에게 “이 타입이라고 믿어”라고 말하는 단언에 가깝기 때문에 잘못 쓰면 타입 오류를 숨길 수 있습니다.

TypeScript
type Route = {
  path: string;
  authRequired: boolean;
};

const routes = {
  home: { path: '/', authRequired: false },
  admin: { path: '/admin', authRequired: true },
} satisfies Record<string, Route>;

// routes.admin.path는 여전히 구체적인 문자열 정보와 객체 key 추론을 유지합니다.

as Record<string, Route>로 단언하면 객체의 세부 key 정보가 흐려질 수 있고, 실수로 필드를 빼먹어도 단언 때문에 문제가 가려지는 경우가 있습니다. satisfies는 설정 객체, 라우트 맵, 디자인 토큰, 권한 정책처럼 “형태 검사는 필요하지만 리터럴 타입도 살리고 싶은” 곳에서 특히 좋습니다.

면접에서는 “타입을 바꾸는 도구가 아니라 타입 조건을 검증하는 도구”라고 설명하면 핵심이 잘 전달됩니다.

관련 질문

같은 카테고리/태그 기준