Programming Field

boolean - TypeScriptキーワード一覧

スポンサーリンク

「boolean」は基本型(プリミティブ型)の1つである「boolean 型」として用いられます。

概要

(特筆の無いものは TypeScript/spec.md 「3.2.2 The Boolean Type」での定義によります。)

キーワード情報

詳細

boolean 型はプログラム上で「bool 値」(ブール値、ブーリアン値)を扱う基本的な型として利用されます。「true」と「false」の2値しか持たない型であり、条件分岐に用いる「フラグ」などで利用されます。

let x: boolean;            // boolean 型変数
x = true;                  // リテラル「true」のデータは boolean 型として扱われるので boolean 型変数に代入可能
x = !x;                    // 「!」演算子の結果は boolean 型
let y: false = false;      // 「true」や「false」のリテラルは型として使え、boolean 型変数としても扱える
let z = y.toString();      // 「Boolean」型のプロパティー(メソッド)が使用できる

※ 「true」および「false」のリテラルを直接的に型として扱うことは稀です。また、型「true | false」は「boolean 型」と等価です。

なお、boolean 型はグローバルの「Boolean」型として扱うことは出来ますが、「Boolean」型は boolean 型として使用することができません。また、「Boolean」型の変数に boolean 型データを代入しても実体は「Boolean」オブジェクトのデータではなくあくまで boolean 型データであるため、「instanceof Boolean」で検出することは出来ません。そのため、特別な理由が無い限りは「Boolean」型やそのオブジェクトを利用するのではなく boolean 型を利用するのが推奨されます。(関数としての「Boolean」を利用するのは問題ありません。)

let p = Boolean(31);       // 「Boolean 関数」の戻り値は boolean 型
let q = new Boolean(62);   // 「Boolean」オブジェクトの作成(「Boolean」型)
let r = p === q;           // この結果は false になる(式自体は問題ないのでエラーにならない)

let f: Boolean | null;     // 「Boolean」型または null 型として定義(strictNullChecksが有効の場合)
if (process.env.NODE_ENV === 'DEVELOPMENT') {
    f = true;
} else {
    f = null;
}
// 「Boolean」型かどうかののチェック
if (f instanceof Boolean) {
    // (型解析上は f は Boolean になるが実際にはここに入らない)
    console.log('Boolean', f);
} else {
    // (型解析上は f は null になるが実際には数値である場合もここに入る)
    console.log('null', f);
}

boolean 型かどうかは typeof x === "boolean" でチェックできます。また、この式は以下のように型ガード(type guard)としても利用できます。

let unk: unknown;   // 型が不明な変数
.
.
.
if (typeof unk === 'boolean') {
    // このブロックでは unk を boolean 型の変数として扱える
    console.assert(unk, '\'unk\' is false');
}

※ 「Boolean」型は内部的にはオブジェクトであるため、x が「Boolean」型であるとき typeof x === "boolean" は false になります。

なお、他の言語と異なり、ECMAScriptでは「a && b」や「a || b」という式の結果は必ずしもブール値とはなりません。TypeScriptでもこれに倣い、「a && b」や「a || b」は「a」と「b」の型に基づいたunion type(共用体型)となります。そのため、「if (a && b) {...}」のような条件文の条件式を変数等に抽出する場合、「boolean 型」の変数等に代入するためにその式を「boolean 型」と扱うことを表明(type assertion)する必要があります。

// 型が不明な2つの変数
let a: unknown;
let b: unknown;
.
.
.
// boolean 型の変数に代入するため「as boolean」と「表明」を行う
// (表明が無い場合「unknown 型」になるのでエラーになる)
let flag: boolean = (a || b) as boolean;