基础类型详解

TypeScript 作为 JavaScript 的超集,在保留 JavaScript 原有类型系统的基础上,新增了静态类型注解机制,使开发者能在编译阶段捕获类型错误。基础类型是 TypeScript 类型系统的基石,本节将通过类型卡片形式详细解析各基础类型的定义、语法、使用规范及与 JavaScript 的核心差异。

string 类型

定义:用于表示文本数据,由单引号(')、双引号(")或模板字符串(`)包裹的字符序列。
**语法**:let 变量名: string = 值;
示例

typescript
复制代码
// 正确示例:字符串直接赋值
let username: string = "Alice";
let message: string = 'Hello, TypeScript';
let info: string = `User ${username} joined at ${new Date().toLocaleDateString()}`;

// 错误示例:类型不兼容
let age: string = 25; // 报错:Type 'number' is not assignable to type 'string'

特殊说明:TypeScript 字符串类型与 JavaScript 字符串行为一致,支持所有字符串方法(如 split()toUpperCase() 等),但通过类型注解限制了非字符串值的赋值。

number 类型

定义:表示数值数据,包括整数、浮点数、NaN(非数字)及 Infinity(无穷大)。
语法let 变量名: number = 值;
示例

typescript
复制代码
// 正确示例:各种数值形式
let count: number = 42; // 整数
let pi: number = 3.14159; // 浮点数
let hex: number = 0xff; // 十六进制(255)
let binary: number = 0b1010; // 二进制(10)
let infinity: number = Infinity; // 无穷大

// 错误示例:类型不兼容
let score: number = "95"; // 报错:Type 'string' is not assignable to type 'number'

特殊说明:TypeScript 不区分整数与浮点数类型,统一使用 number 表示,这与 JavaScript 一致;但相比 JavaScript,TS 通过类型检查避免了非数值类型的意外赋值。

boolean 类型

定义:表示逻辑值,仅包含 truefalse 两个字面量。
语法let 变量名: boolean = 值;
示例

typescript
复制代码
// 正确示例:直接赋值或表达式结果
let isDone: boolean = false;
let hasPermission: boolean = user.role === "admin";

// 错误示例:非布尔值赋值
let isActive: boolean = 1; // 报错:Type 'number' is not assignable to type 'boolean'
let isEmpty: boolean = "false"; // 报错:Type 'string' is not assignable to type 'boolean'

特殊说明:与 JavaScript 不同,TypeScript 严格限制 boolean 类型只能接收 true/false,禁止将 0/1 或 "true"/"false" 等非布尔值隐式转换后赋值。

null 与 undefined 类型

定义

  • null:表示“空值”,即变量被明确赋值为“无值”;
  • undefined:表示“未定义”,即变量已声明但未赋值,或对象属性不存在。

语法let 变量名: null = null;let 变量名: undefined = undefined;
示例

typescript
复制代码
// 正确示例:显式赋值
let emptyValue: null = null;
let unassigned: undefined = undefined;

// 错误示例:类型不兼容(取决于 strictNullChecks 配置)
let data: string = null; // 若 strictNullChecks: true,则报错;否则不报错

特殊说明

  • 与 JavaScript 的核心差异:在 JavaScript 中,typeof null 返回 "object"(历史遗留 bug),而 TypeScript 将 nullundefined 定义为独立类型,可通过类型注解显式声明;
  • strictNullChecks 配置影响:当 tsconfig.jsonstrictNullChecks 设为 true(推荐)时,nullundefined 仅能赋值给自身类型或 any 类型;设为 false 时,它们被视为所有类型的子类型,可赋值给任意类型(降低类型安全性)。

注意:生产环境建议始终启用 strictNullChecks: true,通过联合类型(如 string | null)显式处理可能为 null/undefined 的值,避免运行时错误。

其他基础类型(void、never、symbol、bigint)

  • void:表示函数无返回值,仅可赋值 undefinednull(取决于 strictNullChecks)。
    示例:function logMessage(): void { console.log("Hello"); }
  • never:表示永不存在的值的类型,如抛出异常的函数或无限循环函数。
    示例:function throwError(): never { throw new Error("Fatal error"); }
  • symbol:表示唯一且不可变的值,通过 Symbol() 创建,常用于对象属性的唯一键。
    示例:const uniqueKey: symbol = Symbol("id");
  • bigint:表示任意精度整数,用于超过 number 精度范围的数值,通过 n 后缀或 BigInt() 创建。
    示例:let largeNumber: bigint = 9007199254740993n;

TypeScript 与 JavaScript 类型系统差异对比

对比维度 JavaScript TypeScript
null 类型 typeof null 返回 "object" null 是独立类型,typeof null 仍返回 "object"(运行时兼容 JS),但编译时可通过类型注解检测
类型检查时机 仅运行时动态检查,易产生类型相关 bug 编译时静态检查,提前捕获类型不兼容问题
类型灵活性 弱类型,允许隐式类型转换(如 1 + "2" 强类型,默认禁止隐式转换,需显式类型转换

配套练习

  1. 声明基础类型变量:声明包含 stringnumberbooleannullundefinedsymbolbigint 类型的变量,并为其赋值合理的值。
  2. 类型转换函数实现:编写函数实现以下类型转换:
    • numberToString(n: number): string:将数字转换为字符串(如 42 → "42");
    • stringToNumber(s: string): number:将字符串转换为数字(如 "123" → 123,需处理转换失败场景);
    • booleanToNumber(b: boolean): number:将布尔值转换为数字(true → 1false → 0)。

示例实现参考

typescript
复制代码
// number → string
function numberToString(n: number): string {
  return n.toString();
}

// string → number(处理转换失败)
function stringToNumber(s: string): number | null {
  const num = parseFloat(s);
  return isNaN(num) ? null : num;
}

通过上述基础类型的学习,可构建 TypeScript 类型系统的核心认知,为后续复杂类型(如接口、泛型)的学习奠定基础。