const assertion
別名: as const / const assertion / constアサーション
TypeScript で式に `as const` を付け、リテラルを `string` 等へ広げずリテラル型のまま固定する構文。オブジェクトは readonly、配列は readonly タプルになる。
#typescript#as-const#const-assertion#readonly#literal-type
公開:
定義
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 演算子 を参照。