Dev Study
← 解説「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