satisfies(TS 4.9+)는 값의 추론된 타입을 넓히지 않고 값이 어떤 타입에 부합하는지 검사합니다. 제약에 대해 검증하면서도 이후 사용을 위해 정밀한 리터럴 타입을 유지합니다 — 어노테이션과 추론의 장점을 모두 취합니다.
해결하는 문제
ts
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
satisfies(TS 4.9+)는 값의 추론된 타입을 넓히지 않고 값이 어떤 타입에 부합하는지 검사합니다. 제약에 대해 검증하면서도 이후 사용을 위해 정밀한 리터럴 타입을 유지합니다 — 어노테이션과 추론의 장점을 모두 취합니다.
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
어노테이션을 쓰면 b는 넓은 Config로 타이핑됩니다. satisfies를 쓰면 b는 정확한 shape { host: string; port: number }를 유지하면서도 유효한 Config인지 검사됩니다.
const routes = {
home: "/",
user: "/users/:id",
} satisfies Record<string, string>;
type RouteName = keyof typeof routes; // "home" | "user" — 정확한 키 보존
as vs 어노테이션: T — 검사하지만 T로 넓힘(구체성 상실).as T — 타입을 강제, 실제 검사 없음(안전하지 않음).satisfies T — T에 대해 검사하고 좁은 추론 타입을 유지(안전 + 정밀).satisfies는 객체가 interface/제약과 일치하는지 검증하면서도 자동완성, narrowing, keyof를 위한 정확한 리터럴 타입을 얻게 해줍니다.
정확성 과 정밀한 추론을 동시에 원하는 config 객체, 라우트 맵, 테마 팔레트, 상수 룩업에 이상적입니다.