真偽値リテラルとリテラル推論
TypeScriptがリテラルの型推論を拡大または絞り込む仕組みを理解します。
「真偽値リテラルとリテラル推論」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
真偽値リテラル型
boolean 型は、実際には true | false という共用体です。これらはそれぞれ真偽値リテラル型であり、特定の 1 つの真偽値だけを許可する型です。
let yes: true = true;
let no: false = false;
console.log(yes, no);
// yes = false; // Error: false not assignable to true共用体内の真偽値リテラル
真偽値リテラルは、他のリテラルと組み合わせると、判別可能な結果をモデル化する際に効果を発揮します。たとえば、成功フラグとペイロードの形状を組み合わせる場合などです。
type Result =
| { ok: true; value: number }
| { ok: false; error: string };
const r: Result = { ok: true, value: 42 };
console.log(r);型の拡大
変数を初期化すると、TypeScript は推論する型を決定します。正確なリテラル型を維持する場合もあれば、一般的な型に拡大する場合もあります。これを理解することは、予測可能な型を得るために重要です。
const exact = 'hello'; // type: 'hello' (literal)
let broad = 'hello'; // type: string (widened)
console.log(exact, broad);let は一般的な型に拡大される
let 変数は再代入できるため、TypeScript は後からの代入を許可できるように一般的な型を推論します。let の文字列はリテラルではなく、最初から string になります。
let mood = 'happy'; // inferred as string
mood = 'sad'; // allowed
mood = 'tired'; // allowed
console.log(mood);const はリテラルを保持する
const は再代入できないため、TypeScript は最も具体的な型、つまりリテラルを推論します。そのため、const greeting = 'hi' の型は string ではなく 'hi' になります。
const greeting = 'hi'; // type: 'hi'
type Greeting = typeof greeting; // 'hi'
const other: Greeting = 'hi';
console.log(other);数値と真偽値の拡大
同じ規則が数値と真偽値にも適用されます。const は 42 や true をリテラルとして保持しますが、let は number や boolean に拡大します。
const n = 42; // type: 42
const b = true; // type: true
let m = 42; // type: number
let c = true; // type: boolean
console.log(n, b, m, c);型の拡大が存在する理由
型の拡大により、日常的なコードを使いやすくできます。すべての let count = 0 がリテラル 0 として型付けされたら、値をインクリメントできません。型の拡大により、再代入可能な変数を自然に扱えます。
let count = 0; // widened to number
count = count + 1;
count = 10;
console.log('Count:', count);アノテーションでリテラルを固定する
let の型をリテラルのまま維持したい場合があります。明示的なリテラル型の型アノテーションを追加すると、型を狭いまま維持しながら、その共用体の範囲内で再代入できるようになります。
let status: 'on' | 'off' = 'on';
status = 'off'; // allowed
console.log(status);
// status = 'paused'; // Errorオブジェクトプロパティでの型の拡大
オブジェクトリテラルのプロパティも、デフォルトでは型が拡大されます。const オブジェクトであっても、変更可能なプロパティは一般的な型になります。これは、プロパティ自体には再代入できるためです。
const config = { mode: 'dark' };
// config.mode has type string, not 'dark'
config.mode = 'light';
console.log(config.mode);関数によるリテラル推論
関数の戻り値も推論されます。関数が const のリテラル値を返しても、戻り値の型にアノテーションを付けるか、シグネチャでリテラル型を使用しない限り、一般的な型に拡大されます。
function getMode(): 'dark' | 'light' {
return 'dark';
}
const m = getMode(); // type: 'dark' | 'light'
console.log(m);リテラル型と一般的な型の選択
経験則として、正確な値が必要な場合(設定キーや判別子など)は、const または明示的なリテラル型注釈を使用します。通常の可変変数では、型をワイドニングさせます。どちらになるかを理解しておくと、予期しない代入可能性エラーを防げます。
const KEY = 'apiUrl'; // literal 'apiUrl'
let retries = 3; // number
let level: 'low' | 'high' = 'low'; // pinned literal
console.log(KEY, retries, level);理解度チェック
型のワイドニングとリテラル推論の理解度を確認しましょう。
まとめ:リテラル推論
重要なポイント:
trueとfalseはリテラル型です。booleanはtrue | falseと同じです。- let は一般的な型(
string、number、boolean)にワイドニングされます。 - const は正確なリテラル型を保持します。
- リテラル型を注釈として指定すると、
letを狭いユニオン型に固定できます。
次は、as const を使って不変性を明示します。
const literal = 'fixed'; // 'fixed'
let widened = 'fixed'; // string
let pinned: 'a' | 'b' = 'a';
console.log(literal, widened, pinned);AI チューターと学ぶ TypeScript — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 101
- レッスン
- 352
よくある質問
「真偽値リテラルとリテラル推論」レッスンは無料ですか?
はい。「真偽値リテラルとリテラル推論」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「真偽値リテラルとリテラル推論」で何を学びますか?
TypeScriptがリテラルの型推論を拡大または絞り込む仕組みを理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「真偽値リテラルとリテラル推論」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 文字列リテラル型と数値リテラル型
- 真偽値リテラルとリテラル推論
- as constによるconstアサーション
- リテラルをユニオンにまとめる