boolean - TypeScriptキーワード一覧
スポンサーリンク
「boolean」は基本型(プリミティブ型)の1つである「boolean 型」として用いられます。
概要
(特筆の無いものは TypeScript/spec.md 「3.2.2 The Boolean Type」での定義によります。)
- (型としての)キーワード「boolean」(または「boolean 型」)は『Booleanプリミティブ型』を表します。
- 『Booleanプリミティブ型』(以下「boolean 型」)はブール値(ブーリアン値)を表す型であり、「true」および「false」と呼ばれる2値を受け付ける型です。(ES2015 の仕様)
true
およびfalse
のリテラルはそれぞれ boolean 型の「true 値」および「false 値」を表し、いずれも boolean 型の変数への書き込みとして利用できます。- 「true リテラル」および「false リテラル」を「型」として扱った場合は、それらは boolean 型の部分型(subtype)として扱われ、boolean 型のデータに代入することができます。(TypeScript PR #9407)
- boolean 型は(型としては)グローバルにあるインターフェイス「Boolean」型と同じプロパティーを持つオブジェクト型として扱われます。
- 値としては、内部処理「ToObject」が行われたときに「Boolean」のオブジェクトとして変換されます。(ES2015 の仕様)
- 式の結果が boolean 型の値であった場合、その式に対する
typeof
の結果は"boolean"
となります。(ES2015 の仕様)typeof x === "boolean"
という構文を用いると、その条件(型ガード; type guard)下で実行されるコードにおいて x が boolean 型として扱われるようになります。(「4.24 Type Guards」)
キーワード情報
- 「boolean」は識別子としては予約されていません。(ユーザー定義の識別子として利用できます。)
- 「boolean」は型名として予約されています。(ユーザー定義の型名として利用できません。)
詳細
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;