TypeScript | 基礎文法:変数・基本型 – booleanリテラル型

TypeScript
スポンサーリンク

booleanリテラル型とは何か

booleanリテラル型は、「true だけ」「false だけ」といった、特定の真偽値だけを許可する型です。
普通の boolean 型は「truefalse のどちらでもOK」ですが、booleanリテラル型は「この変数は絶対に true にしかならない」「この値は false 固定」といった、もっと狭い世界を表現します。

let b1: boolean;
b1 = true;
b1 = false; // どちらもOK

let b2: true;
b2 = true;   // OK
// b2 = false; // エラー:false は true 型に代入できない
TypeScript

b2 の型は boolean ではなく、「値が true のときだけ許される型」です。
これが booleanリテラル型の一番シンプルなイメージです。


booleanリテラル型とユニオン型

「true か false だけ」をあえて型で表現する

booleanリテラル型は、truefalse をユニオンして使うこともできます。

type Flag = true | false;

let f: Flag = true;
f = false;
TypeScript

これは実質 boolean と同じですが、「この型は boolean の別名だ」と明示したいときに使うこともあります。
ただ、実務的には「true だけ」「false だけ」を表現する場面の方が多いです。

「この関数は必ず true を返す」などを型で表現する

たとえば、「チェック関数だけど、現状は必ず成功(true)を返す」といった場面で、戻り値を true 型にすることができます。

function alwaysTrue(): true {
  return true;
//  return false; // エラー
}
TypeScript

これは少し極端な例ですが、「この関数は絶対に false を返さない」ということを型で保証できます。


const と booleanリテラル型の関係

const で宣言すると自動的にリテラル型になる

const で boolean を宣言すると、その変数は多くの場合「booleanリテラル型」として扱われます。

const IS_PROD = true;
// IS_PROD の型は true

let isProd2 = true;
// isProd2 の型は boolean
TypeScript

const IS_PROD は再代入できないので、「この変数は一生 true のまま」とコンパイラは判断できます。
その結果、型としても true というリテラル型にまで絞り込めます。

一方 let isProd2 は、将来 false になるかもしれないので、「boolean 全体」として扱われます。

定数フラグと型をリンクさせる

この性質を使うと、「定数フラグ」と「型」をきれいに結びつけられます。

const FEATURE_ENABLED = true as const;

type FeatureFlag = typeof FEATURE_ENABLED; // true 型

let flag: FeatureFlag = FEATURE_ENABLED;
// flag = false; // エラー
TypeScript

「このフラグは常に有効」という前提を、値と型の両方で固定できます。


booleanリテラル型が役に立つ場面

条件分岐の結果を「固定」したいとき

型の絞り込み(ナローイング)と組み合わせると、booleanリテラル型は自然に登場します。

function isString(value: unknown): value is string {
  return typeof value === "string";
}
TypeScript

ここで value is string という戻り値の型は、「この関数が true を返したとき、その value は string だとみなしていい」という型レベルの約束です。
実際の戻り値は true / false の boolean ですが、「true のときだけ特別な意味を持つ」という形で、booleanリテラル型の考え方が使われています。

「この状態では必ず true / false」と分かるコードを書く

たとえば、状態管理の中で「このフラグは、ある条件の中では必ず true だ」と分かるように書くと、TypeScript がその情報を活かしてくれます。

type State = {
  loaded: boolean;
  data?: string;
};

function handle(state: State) {
  if (state.loaded === true) {
    // ここでは loaded は true 型に絞り込まれているイメージ
    console.log("読み込み済み");
  } else {
    console.log("読み込み中");
  }
}
TypeScript

ここでは明示的に true 型とは書いていませんが、state.loaded === true のブロック内では、「loaded は true である」という前提が型システムに伝わります。
booleanリテラル型は、こうした「条件による型の絞り込み」とセットでよく登場します。


初心者がまず掴んでおきたい booleanリテラル型の感覚

booleanリテラル型は、こう捉えると分かりやすいです。

boolean は「true か false のどちらでもOK」
true 型は「true だけOK」
false 型は「false だけOK」

そして、実際のコードの中では、

const IS_PROD = true のような「変わらないフラグ」
value is string のような「true のときだけ特別な意味を持つ判定」

といった形で、じわっと使われています。

最初から無理に多用する必要はありませんが、
「ここ、本当は true 固定なんだよな」
「この関数は false を返さない前提なんだよな」

と感じる場所が出てきたら、「それを型で表現できないか?」と一度考えてみる。
その視点を持ち始めたとき、あなたのTypeScriptは「ただの型付きJavaScript」から、「意図を型に刻んだ設計の道具」に変わっていきます。

タイトルとURLをコピーしました