TypeScript Number

TypeScript 中的 Number 类型详解

在 TypeScript 中,number 是表示数字的原始类型(primitive type),它对应 JavaScript 中的 Number 类型。TypeScript 的 number 类型涵盖了所有数字值,包括整数、浮点数、正负数、Infinity、NaN 等。

1. 基本用法与字面量

let age: number = 30;              // 十进制整数
let height: number = 1.75;         // 浮点数
let negative: number = -10;        // 负数

// 不同进制的字面量(TS 支持,直接推断为 number)
let decimal: number = 100;         // 十进制
let hex: number = 0xf00d;          // 十六进制(0x 开头)
let binary: number = 0b1010;       // 二进制(0b 开头,ES6+)
let octal: number = 0o744;         // 八进制(0o 开头,ES6+)

2. 特殊数值

let infinity: number = Infinity;       // 正无穷大
let negInfinity: number = -Infinity;   // 负无穷大
let notANumber: number = NaN;          // 非数字(Not a Number)

// 检查 NaN(不能用 === NaN)
if (isNaN(notANumber)) {
  console.log("这是 NaN");
}

3. BigInt(大整数,独立类型)

注意:BigInt 不是 number 类型,它是独立的原始类型(从 ES2020 开始)。

let big: bigint = 9007199254740992n;    // 末尾加 n 表示 BigInt
let bigger: bigint = BigInt("9007199254740992");

// number 和 bigint 不能直接运算
// let sum: number = 1 + big;  // 错误

let safeSum: bigint = 1n + big;        // OK

number 的安全整数范围:-2^53 + 12^53 - 1(即 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER)。

4. 常用 Number 全局方法(TS 自动可用)

这些方法在 TypeScript 中类型定义完善,使用时有智能提示:

方法描述示例
Number.isNaN(value)判断是否为 NaNNumber.isNaN(NaN) → true
Number.isFinite(value)判断是否为有限数Number.isFinite(Infinity) → false
Number.isInteger(value)判断是否为整数Number.isInteger(42) → true
Number.isSafeInteger(value)判断是否为安全整数Number.isSafeInteger(9007199254740991) → true
Number.parseFloat(str)字符串转浮点数Number.parseFloat("3.14") → 3.14
Number.parseInt(str, radix)字符串转整数(可指定进制)Number.parseInt("10", 2) → 2
toFixed(digits)保留小数位(返回字符串)(3.14159).toFixed(2) → "3.14"
toPrecision(precision)有效数字精度(返回字符串)(3.14159).toPrecision(4) → "3.142"

示例:

let price: number = 99.99;
let formatted: string = price.toFixed(2);  // "99.99",类型为 string

let numStr: string = "123.45abc";
let parsed: number = Number(numStr);        // NaN
let safeParsed: number = parseFloat(numStr); // 123.45

5. 类型转换与检查

// 显式转换
let str: string = "42";
let num: number = Number(str);       // 推荐
// let num: number = +str;           // 简写,但可读性差
// let num: number = parseInt(str);

// 类型守卫中使用
function double(value: string | number): number {
  if (typeof value === "string") {
    return parseInt(value) * 2;
  }
  return value * 2;  // value 被缩小为 number
}

6. 字面量类型(Literal Types)与 number

可以结合字面量创建更精确的类型:

type Dice = 1 | 2 | 3 | 4 | 5 | 6;
let roll: Dice = 6;  // 只能是 1~6

type StatusCode = 200 | 404 | 500;
let code: StatusCode = 200;

7. 最佳实践建议

建议说明
优先使用 number日常数字运算足够
超大整数用 bigint超过安全范围时必须用
避免 new Number()创建包装对象,不推荐(用字面量)
格式化输出用 toFixed()但注意返回的是 string
判断 NaN 用 Number.isNaN()更准确
开启 strict 模式避免隐式转换导致的 bug

小结:number 类型速查

类型表示范围示例
number所有浮点数(IEEE 754 双精度)42, 3.14, NaN
bigint任意大小整数123n
安全整数-(2^53-1)2^53-1Number.MAX_SAFE_INTEGER

如果您想深入了解 数字运算精度问题数学工具函数(如 Math 对象)、自定义数字类型(如品牌类型 Brand Type),或者需要实际代码示例,请告诉我!

文章已创建 3383

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部