const assertion
別名: as const / const assertion / constアサーション
TypeScript で式に as const を付け、リテラルを string 等へ広げずリテラル型のまま固定する構文。
オブジェクトは readonly、配列は readonly タプルになる。
公開:
定義
const assertion(as const)は、式に付けて「これ以上型を広げない」と TypeScript に指示する構文。
リテラルを string や number へ広げず、"GET" や 42 といったリテラル型のまま固定する。
対象がオブジェクトなら全プロパティが readonly、配列なら readonly タプルとして扱われる。
詳細
通常 const obj = { method: "GET" } の method は string 型へ広がる。as const を付けると "GET" リテラル型に固定され、判別可能ユニオンのタグや設定値、ルート定義などで安全に使える。
適用できるのはリテラル式に直接だけで、変数や関数呼び出しの結果には付けられない。
よくある誤解
- 型アサーション
as Fooと同じ: 違う。as Fooは型を別の型へ上書きするが、as constは推論を「狭いまま」固定するだけ。 - 実行時に値が凍結される: ならない。
あくまでコンパイル時の型の話で、Object.freezeのような実行時の不変化は行わない。
関連
絞り込みが効かないときは as const をつけても型が絞り込まれない、検査と推論の両立は satisfies 演算子 を参照。