as constによるconstアサーション
オブジェクトや配列を、階層の深いreadonlyリテラル型として固定します。
「as constによるconstアサーション」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
as const アサーション
const アサーションは as const と記述し、値に対して最も具体的で、深い readonly 型を TypeScript に推論させます。オブジェクトのプロパティはリテラル型で不変になり、配列は読み取り専用タプルになります。
const point = { x: 10, y: 20 } as const;
// type: { readonly x: 10; readonly y: 20 }
console.log(point.x, point.y);as const なしの場合
アサーションがない場合、オブジェクトのプロパティはワイドニングされます。{ x: 10 } では x: number と推論され、変更可能です。前のシーンと比較して、as const による違いを確認してください。
const a = { x: 10 }; // x: number, mutable
const b = { x: 10 } as const; // x: 10, readonly
a.x = 99; // allowed
console.log(a.x, b.x);プロパティをリテラル型に固定する
as const は、すべての文字列プロパティをリテラル型に変換します。キーと値を正確なまま保持する必要がある設定オブジェクトで、特に役立ちます。
const config = {
env: 'production',
retries: 3
} as const;
// env: 'production', retries: 3
console.log(config.env, config.retries);readonly による変更の防止
as const によってプロパティが readonly になるため、コンパイラーは再代入を禁止します。型レベルで値が不変になり、意図しない変更から保護されます。
const settings = { mode: 'dark' } as const;
console.log(settings.mode);
// settings.mode = 'light'; // Error: readonly property配列に対する const アサーション
配列に as const を適用すると、リテラル型の読み取り専用タプルが生成されます。長さが固定され、各要素は正確な値を保持します。
const colors = ['red', 'green', 'blue'] as const;
// type: readonly ['red', 'green', 'blue']
console.log(colors[0], colors.length);読み取り専用配列は変更できない
読み取り専用タプルでは、push などの変更メソッドやインデックスによる代入が拒否されます。データが固定されるため、固定のルックアップテーブルに最適です。
const days = ['Mon', 'Tue', 'Wed'] as const;
console.log(days.join(', '));
// days.push('Thu'); // Error: push does not exist on readonly tupletypeof arr[number] によるユニオンの導出
強力なパターンとして、readonly 配列から typeof arr[number] を使って要素型のユニオンを導出できます。値を一度記述するだけで、リテラル型のユニオンを得られます。
const ROLES = ['admin', 'editor', 'viewer'] as const;
type Role = typeof ROLES[number];
// 'admin' | 'editor' | 'viewer'
const r: Role = 'editor';
console.log(r);信頼できる唯一の情報源
これにより、実行時の配列と型を同期させられます。配列に値を追加すると、ユニオンも自動的に更新されるため、保守するリストが重複しません。
const SIZES = ['S', 'M', 'L', 'XL'] as const;
type Size = typeof SIZES[number];
function pick(s: Size): void {
console.log('Picked', s);
}
pick('M');タプルに対する const アサーション
要素の型が異なるタプルでは、as const によって正確な型と順序の両方が保持され、精密な読み取り専用タプルが生成されます。
const pair = [1, 'one'] as const;
// type: readonly [1, 'one']
console.log(pair[0], pair[1]);readonly の深い適用
as const は深く適用されます。ネストされたオブジェクトや配列も、最下層までリテラル型を持つ読み取り専用になります。
const data = {
name: 'app',
tags: ['a', 'b']
} as const;
// tags is readonly ['a', 'b']
console.log(data.name, data.tags[1]);列挙型のための const アサーション
const オブジェクトとそこから導出したユニオンは、enum の軽量な代替になります。実行時にはリテラル値を、型としては正確な型を得られ、追加の出力コードもありません。
const Status = {
Idle: 'idle',
Active: 'active'
} as const;
type Status = typeof Status[keyof typeof Status];
const s: Status = Status.Active;
console.log(s);理解度チェック
const アサーションの理解度を確認しましょう。
まとめ:as const
as const について、次のことを学びました:
- 最も具体的で、深い readonly リテラル型を推論します。
- オブジェクトのプロパティをリテラル型の読み取り専用フィールドに変換します。
- 配列をリテラル型の読み取り専用タプルに変換します。
typeof arr[number]によるユニオンの導出を可能にし、値と型を同期させます。
次は、リテラルを組み合わせて表現力のあるユニオンを作ります。
const LEVELS = ['low', 'mid', 'high'] as const;
type Level = typeof LEVELS[number];
const chosen: Level = 'mid';
console.log(chosen);よくある質問
「as constによるconstアサーション」レッスンは無料ですか?
はい。「as constによるconstアサーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「as constによるconstアサーション」で何を学びますか?
オブジェクトや配列を、階層の深いreadonlyリテラル型として固定します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「as constによるconstアサーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 文字列リテラル型と数値リテラル型
- 真偽値リテラルとリテラル推論
- as constによるconstアサーション
- リテラルをユニオンにまとめる