satisfies

TypeScript 4.9에 도입된 연산자로, 값의 타입 추론 결과를 유지하면서 해당 값이 특정 타입 조건을 만족하는지 검사할 때 사용합니다.

핵심 특징

코드 예시

type Color = "red" | "green" | "blue";
type RGB = [red: number, green: number, blue: number];

const palette: Record<Color, string | RGB> = {
    red: [255, 0, 0],
    green: "#00ff00",
    blue: [0, 0, 255]
};

// ⚠️ 오류 발생
const greenNormalized = palette.green.toUpperCase();

위 코드에서 palette.green의 타입은 string | RGB로 추론되기 때문에 .toUpperCase() 호출 시 타입 에러가 발생합니다.

const palette = {
    red: [255, 0, 0],
    green: "#00ff00",
    blue: [0, 0, 255]
} satisfies Record<Color, string | RGB>;

// ✅ 정상 동작
const greenNormalized = palette.green.toUpperCase();

satisfies를 사용하면 palette가 Record<Color, string | RGB> 조건을 만족하는지 검사하면서도, palette.green의 타입은 string으로 그대로 추론되어 .toUpperCase()를 정상적으로 호출할 수 있습니다.

타입 애너테이션 · 타입 단언과의 비교

항목타입 애너테이션(: T)타입 단언(as T)satisfies T
타입 검사수행함수행하지 않음수행함
결과 타입선언한 타입으로 넓어짐단언한 타입으로 강제됨원래 추론된 구체적인 타입 유지
런타임 안전성안전개발자 책임안전

언제 사용하는가

핵심 정리

satisfies는 타입을 강제로 바꾸지 않고 조건 충족 여부만 검사하기 때문에, 의도보다 더 넓은 타입으로 추론되는 것을 방지하면서도 각 속성의 구체적인 타입 정보를 잃지 않을 수 있습니다.

→ 타입스크립트 satisfies 키워드에 대해 설명해주세요

CSLOG에서 보기