TypeScript 作为 JavaScript 的超集,在保留 JavaScript 原有类型系统的基础上,新增了静态类型注解机制,使开发者能在编译阶段捕获类型错误。基础类型是 TypeScript 类型系统的基石,本节将通过类型卡片形式详细解析各基础类型的定义、语法、使用规范及与 JavaScript 的核心差异。
定义:用于表示文本数据,由单引号(')、双引号(")或模板字符串(`)包裹的字符序列。
**语法**:let 变量名: string = 值;
示例:
// 正确示例:字符串直接赋值
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() 等),但通过类型注解限制了非字符串值的赋值。
定义:表示数值数据,包括整数、浮点数、NaN(非数字)及 Infinity(无穷大)。
语法:let 变量名: number = 值;
示例:
// 正确示例:各种数值形式
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 通过类型检查避免了非数值类型的意外赋值。
定义:表示逻辑值,仅包含 true 和 false 两个字面量。
语法:let 变量名: boolean = 值;
示例:
// 正确示例:直接赋值或表达式结果
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:表示“未定义”,即变量已声明但未赋值,或对象属性不存在。语法:let 变量名: null = null; 或 let 变量名: undefined = undefined;
示例:
// 正确示例:显式赋值
let emptyValue: null = null;
let unassigned: undefined = undefined;
// 错误示例:类型不兼容(取决于 strictNullChecks 配置)
let data: string = null; // 若 strictNullChecks: true,则报错;否则不报错
特殊说明:
typeof null 返回 "object"(历史遗留 bug),而 TypeScript 将 null 和 undefined 定义为独立类型,可通过类型注解显式声明; tsconfig.json 中 strictNullChecks 设为 true(推荐)时,null 和 undefined 仅能赋值给自身类型或 any 类型;设为 false 时,它们被视为所有类型的子类型,可赋值给任意类型(降低类型安全性)。注意:生产环境建议始终启用 strictNullChecks: true,通过联合类型(如 string | null)显式处理可能为 null/undefined 的值,避免运行时错误。
undefined 或 null(取决于 strictNullChecks)。function logMessage(): void { console.log("Hello"); } function throwError(): never { throw new Error("Fatal error"); } Symbol() 创建,常用于对象属性的唯一键。const uniqueKey: symbol = Symbol("id"); number 精度范围的数值,通过 n 后缀或 BigInt() 创建。let largeNumber: bigint = 9007199254740993n;| 对比维度 | JavaScript | TypeScript |
|---|---|---|
| null 类型 | typeof null 返回 "object" |
null 是独立类型,typeof null 仍返回 "object"(运行时兼容 JS),但编译时可通过类型注解检测 |
| 类型检查时机 | 仅运行时动态检查,易产生类型相关 bug | 编译时静态检查,提前捕获类型不兼容问题 |
| 类型灵活性 | 弱类型,允许隐式类型转换(如 1 + "2") |
强类型,默认禁止隐式转换,需显式类型转换 |
string、number、boolean、null、undefined、symbol、bigint 类型的变量,并为其赋值合理的值。 numberToString(n: number): string:将数字转换为字符串(如 42 → "42"); stringToNumber(s: string): number:将字符串转换为数字(如 "123" → 123,需处理转换失败场景); booleanToNumber(b: boolean): number:将布尔值转换为数字(true → 1,false → 0)。示例实现参考:
// 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 类型系统的核心认知,为后续复杂类型(如接口、泛型)的学习奠定基础。