← 解説「as const — 値をリテラル型で固定する」に戻る
サンプルコードで身につける: as const — 値をリテラル型で固定する
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1widening を as const で止める
let で受けた "dark" の型は string に広がる(widening)ため、どんな文字列でも再代入できてしまいます。as const を付けると "dark" というリテラル型のまま固定され、別の文字列を弾けるようになります。
TypeScript
2オブジェクト全体をリテラル型で固定する
const で宣言したオブジェクトでも、プロパティ自体は書き換えられてしまいます。as const を付けると全プロパティが「書いたとおりのリテラル型 + readonly」になり、定数のつもりのデータをうっかり書き換えるコードを弾けます。
TypeScript
3配列の as const は readonly な組になる
配列に as const を付けると、要素の値と個数が固定された readonly な組になります。読み取りやループは普段どおりできる一方、push などの変更系メソッドは使えなくなる、という「固定」の感覚をつかむ例です。
TypeScript
4リテラル型を要求する関数にそのまま渡す
as const の実務での主な恩恵は、固定した値がリテラル型のまま残ることです。string に広がった値は "light" | "dark" のようなリテラル型の引数に渡せませんが、as const 付きの定数ならそのまま渡せます。
TypeScript
5許可リストを as const で定義する
「許可する HTTP メソッドの一覧」のような選択肢の定数リストは、as const で定義するのが実務の定番です。要素が string ではなくリテラル型として残るので、リテラル型を要求する処理にループでそのまま流し込めます。
TypeScript