テック技報最新号へ →
コード

TypeScript: 型注釈や as の代わりに satisfies を使い、推論を保ったまま型チェックする

satisfies T は「T に合っているか」を検査しつつ、値の型は書いたとおりの具体的な型(リテラル型など)のまま残す。

@anurag_629 · 投稿 2026-10-01
#typescript#型#satisfies

どんな問題を解決する?

  • : T で型注釈すると、値の型が T に広がってしまい、config.port が string | number になる等、具体的な情報が失われる
  • as T はコンパイラに「信じて」と言うだけでチェックが甘く、ミスを見逃す

コード例

ts
type Config = Record<string, string | number>;

// 型注釈: port は string | number に広がる
const a: Config = { port: 3000, host: "localhost" };
a.port.toFixed(); // ❌ エラー(string かもしれない)

// satisfies: Config に合うか検査しつつ、port は number のまま
const b = { port: 3000, host: "localhost" } satisfies Config;
b.port.toFixed(); // ✅ OK

// as: 間違っていても通ってしまうことがある
const c = {} as { port: number }; // ⚠️ port が無いのにエラーにならない
c.port.toFixed();                  // 実行時に TypeError
  • 判別可能なユニオンやリテラル型の補完がそのまま効くのも利点。

使い分けの目安

  • 定数オブジェクト・設定・ルーティング表などは satisfies
  • as は「コンパイラより自分が知っている」場面(例: 外部APIの JSON.parse 結果)に限定。その場合も、Zod などで実行時検証するほうが安全

注意点

  • TypeScript 4.9 以降。
  • satisfies は値の型を変えないので、関数の戻り値型などで広い型として扱いたい場合は型注釈を使う。

出典

X の元の投稿を開く