satisfies 演算子は、型注釈(const x: T = ...)と何が違いますか。
satisfies は型に合っているかを検査しつつ、変数の型は推論されたもっと具体的な型のまま残します。型注釈だと注釈した型に広がります。as とは逆の働きです。
面接官が見ているのは4.9 で入った satisfies の意味。型の検査と推論の両立。
よくある答えと、面談でどう見られるか
- 型に合っているかは検査するが、変数の型は推論されたもっと具体的な型のまま残す
その通りです。検査はしたいが、型を広げたくないときに使います。 - as と同じで、型を断言する
逆です。satisfies は合っていなければエラーにします。as は検査を緩めます。 - 型注釈と同じ。書き方が違うだけ
検査する点は同じですが、結果の型が違います。型注釈だと注釈した型に広がります。 - 実行時に値が型に合っているか確かめる
実行時には何もしません。コンパイル時の検査です。
模範解答
TypeScript 4.9 で入った演算子です。式がある型に合っているかを検査しますが、その式の型は変えません。
const routes = { home: "/", about: "/about" } satisfies Record<string, string>Record<string, string> に合っているかは検査されます。それでいて routes の型は { home: string; about: string } のままなので、routes.home は補完が効き、存在しない routes.contact はエラーになります。
型注釈(const routes: Record<string, string> = ...)にすると、型が Record<string, string> に広がり、どんなキーでも読めてしまいます。as は検査を緩めるので、satisfies とは逆の働きです。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。