AetherEchoesEngineering
Vol.042025年5月27日
Engineering#00062 min2463 view

TypeScript の satisfies と as をいつ切り替えるか

satisfies は「型を絞らずに型を満たす」ことを表現できる演算子。as と何が違うのかを、実例 3 つで切り分けます。

SoSoraEndo2025年5月27日2 min246

結論を先に

  • as は「型を強制する」 — 嘘をつける
  • satisfies は「型に従っているか確認する」 — 嘘をつけない
// as: 値の型情報が失われる
const palette = { primary: '#000', accent: '#f00' } as Record<string, string>;
palette.primary; // string

// satisfies: 値の具体型が保たれる
const palette = { primary: '#000', accent: '#f00' } satisfies Record<string, string>;
palette.primary; // '#000'(リテラル)

どう使い分けるか

  1. 設定オブジェクトのリテラル型を保ちたい → satisfies
  2. 外部ライブラリから来る unknown を絞り込みたい → as(最後の砦として)
  3. テストでモックを作る → satisfies(型ずれを早期検出できる)

as の使用は「赤信号」とみなす

as を書く瞬間は、コンパイラに「この型を信じて」と頼んでいる瞬間。レビューでは、satisfies で書き換えられないか必ず一度問う。

まとめ

迷ったら satisfiesas を選ぶときは「なぜここで型推論を止めるのか」を一行コメントで残しておくと、半年後の自分が助かります。

Tags

Reaction

Share

X (Twitter)