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'(リテラル)
どう使い分けるか
- 設定オブジェクトのリテラル型を保ちたい →
satisfies - 外部ライブラリから来る
unknownを絞り込みたい →as(最後の砦として) - テストでモックを作る →
satisfies(型ずれを早期検出できる)
as の使用は「赤信号」とみなす
as を書く瞬間は、コンパイラに「この型を信じて」と頼んでいる瞬間。レビューでは、satisfies で書き換えられないか必ず一度問う。
まとめ
迷ったら satisfies。as を選ぶときは「なぜここで型推論を止めるのか」を一行コメントで残しておくと、半年後の自分が助かります。