TypeScript原始类型有哪些

TypeScript作为JavaScript的超集,提供了完整的类型系统,其中原始类型是最基础也是最重要的组成部分。掌握这些类型对于编写类型安全的代码至关重要,也是前端开发者必须掌握的"八股文"内容。

一、原始类型概述

在TypeScript中,原始类型(Primitive Types)对应于JavaScript中的基本数据类型,包括:numberstringbooleannullundefinedsymbolbigint。这些类型表示最简单的数据形式,是不可变的值。

二、各原始类型详解

1. number类型

number类型表示所有数值,包括整数和浮点数,与JavaScript中的number类型一致。

typescript 复制代码
let integer: number = 42;        // 整数
let float: number = 3.14;        // 浮点数
let binary: number = 0b1010;     // 二进制
let octal: number = 0o744;       // 八进制
let hex: number = 0xf00d;        // 十六进制
let big: number = 1_000_000;     // 使用分隔符提高可读性

重要特性:

  • TypeScript不支持单独的整数和浮点数类型,统一为number
  • 支持ES6引入的二进制和八进制字面量
  • 支持数字分隔符(ES2020特性)

2. string类型

string类型表示文本数据,可以使用单引号、双引号或反引号定义。

typescript 复制代码
let firstName: string = "John";
let lastName: string = 'Doe';
let fullName: string = `${firstName} ${lastName}`; // 模板字符串

// 多行字符串
let message: string = `这是第一行
这是第二行
这是第三行`;

重要特性:

  • 支持模板字符串(ES6特性)
  • 支持多行字符串
  • 字符串是不可变的(immutable)

3. boolean类型

boolean类型表示逻辑值,只有两个可能的值:truefalse

typescript 复制代码
let isDone: boolean = false;
let isActive: boolean = true;

// 布尔运算
let andResult: boolean = true && false;  // false
let orResult: boolean = true || false;   // true
let notResult: boolean = !true;          // false

重要特性:

  • 用于条件判断和逻辑运算
  • 在类型系统中起到重要的约束作用

4. null和undefined类型

nullundefined在TypeScript中既是值也是类型。

typescript 复制代码
let u: undefined = undefined;
let n: null = null;

// 默认情况下,null和undefined是所有类型的子类型
let num: number = null;      // 在strictNullChecks关闭时有效
let str: string = undefined; // 在strictNullChecks关闭时有效

重要特性:

  • strictNullChecks模式下,null和undefined只能赋值给any和它们各自的类型
  • 常用于表示可选值或缺失值

5. symbol类型

symbol类型表示唯一且不可变的值,主要用于对象属性的键。

typescript 复制代码
let sym1: symbol = Symbol();
let sym2: symbol = Symbol("description");

const obj = {
  [sym1]: "value1",
  [sym2]: "value2"
};

console.log(obj[sym1]); // "value1"

// 全局symbol注册表
let globalSym: symbol = Symbol.for("key");

重要特性:

  • 每个symbol值都是唯一的
  • 可以用作对象属性的键,避免属性名冲突
  • 支持全局symbol注册表

6. bigint类型

bigint类型表示任意精度的整数,用于处理超过Number.MAX_SAFE_INTEGER的大整数。

typescript 复制代码
let big1: bigint = 9007199254740991n; // 字面量语法
let big2: bigint = BigInt(9007199254740991);

// 运算
let sum: bigint = big1 + big2;
let product: bigint = big1 * big2;

// 比较
let isEqual: boolean = big1 === big2;

重要特性:

  • 字面量以n结尾
  • 不能与number类型混合运算
  • 用于处理金融计算、大整数ID等场景

三、类型推断与注解

TypeScript具有强大的类型推断能力,但在某些情况下需要显式类型注解。

typescript 复制代码
// 类型推断
let inferredString = "hello";    // 推断为string类型
let inferredNumber = 42;         // 推断为number类型

// 显式类型注解
let explicitString: string = "hello";
let explicitNumber: number = 42;

// 联合类型
let stringOrNumber: string | number = "hello";
stringOrNumber = 42; // 有效

四、严格模式下的注意事项

strictNullChecks模式下,需要特别注意null和undefined的处理。

typescript 复制代码
// 启用strictNullChecks时
let s: string = "hello";
s = null;      // 错误
s = undefined; // 错误

// 可选参数和属性
function greet(name?: string) {
  // name可能是string或undefined
  console.log(`Hello, ${name?.toUpperCase() || ' stranger'}`);
}

// 非空断言操作符
let maybeString: string | null = getString();
let length: number = maybeString!.length; // 确信maybeString不为null

五、最佳实践

  1. 尽量使用类型推断:让TypeScript自动推断类型,减少冗余代码
  2. 合理使用严格模式:启用strictNullChecks提高代码安全性
  3. 适当使用类型注解:在函数参数、返回值和复杂数据结构处使用显式注解
  4. 处理边界情况:妥善处理null和undefined,避免运行时错误

六、总结

TypeScript的原始类型系统为JavaScript开发提供了坚实的类型安全基础。通过深入理解每个原始类型的特性和使用场景,开发者可以编写出更加健壮和可维护的代码。这些基础知识不仅是面试中的常见考点,更是日常开发中不可或缺的核心技能。

掌握这些原始类型,结合TypeScript的高级类型特性,将能够构建出复杂而类型安全的应用程序,显著提高开发效率和代码质量。