satisfies(TS 4.9+)は、値の推論された型を拡大することなく、その値がある型に適合していることをチェックします。制約に対して検証しつつ、後で使うために正確なリテラル型を保持します。注釈と推論の両方のいいとこ取りです。
これが解決する問題
ts
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
satisfies(TS 4.9+)は、値の推論された型を拡大することなく、その値がある型に適合していることをチェックします。制約に対して検証しつつ、後で使うために正確なリテラル型を保持します。注釈と推論の両方のいいとこ取りです。
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
注釈を使うと、b は幅広い Config 型として扱われます。satisfies を使うと、b は正確な形状 { host: string; port: number } を保持し、かつ有効な Config であることがチェックされます。
const routes = {
home: "/",
user: "/users/:id",
} satisfies Record<string, string>;
type RouteName = keyof typeof routes; // "home" | "user" — exact keys preserved
as と注釈の比較: T — チェックするが、T に拡大される(具体性が失われる)。as T — 型を強制するが、実際のチェックは行われない(安全でない)。satisfies T — T に対してチェックし、絞り込まれた推論型を保持する(安全かつ正確)。satisfies を使うと、オブジェクトがインターフェースや制約に一致することを検証しつつ、オートコンプリート、絞り込み、keyof のために正確なリテラル型を得られます。
設定オブジェクト、ルートマップ、テーマパレット、定数ルックアップなど、正しさと正確な推論の両方が欲しい場面に最適です。