Programming Field

number - TypeScriptキーワード一覧

スポンサーリンク

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

概要

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

キーワード情報

詳細

number 型はプログラム上で「数値」を扱う基本的な型として利用されます。倍精度浮動小数点数(俗に「double」)として加減乗除などに利用できます。

let x: number;             // number 型変数
x = 23;                    // 数値リテラルのデータは number 型として扱われるので number 型変数に代入可能
x = 4.5 * x;               // number 型同士の算術演算の結果は number 型
let y: 3 = 3;              // 数値リテラル「3」は型として使え、number 型変数としても扱える
let z = y.toFixedString(); // 「Number」型のプロパティー(メソッド)が使用できる

NaN および Infinity は、いずれもES2015の仕様における number 型のグローバルプロパティー値(それぞれ「NaN」値と「+∞」値を持つ定数)として定義されており、数値リテラルではありません。そのため、number 型の値としては利用できますが「NaN」などをそのまま「型」としては利用できません。

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

let p = Number(31);        // 「Number 関数」の戻り値は number 型
let q = new Number(62);    // 「Number」オブジェクトの作成(「Number」型)
let r = p * q;             // ERROR: TS2363: 算術演算に使えるのは number 型か any 型のみ

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

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

let unk: any;       // 型が不明な変数
.
.
.
if (typeof unk === 'number') {
    // このブロックでは unk を number 型の変数として扱える
    console.log(unk * unk);
}

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