TypeScript 基础类型
上一篇我们学习了类型注解——用 : 类型 的方式约束变量。现在让我们深入了解 TypeScript 的 7 种基础类型。
TypeScript 基础类型包括 7 种:
string:文本数据,使用单引号、双引号或反引号(模板字符串)包裹。number:数字类型,包含整数、浮点数、十六进制、二进制、八进制等。boolean:只有两个值:true和false。null:表示空值,通常用于表示未初始化的变量。undefined:表示未定义的变量,通常用于表示函数没有返回值。void:表示没有返回值的函数,通常用于表示副作用函数。any:表示任意类型,不进行类型检查,不建议使用。
类型详解
string
文本数据,使用单引号、双引号或反引号(模板字符串)包裹。
// 字符串类型
let username: string = "张三";
let greeting: string = 'Hello';
let template: string = `欢迎回来,${username}`;
// 函数参数也适用
function logMessage(msg: string): void {
console.log(msg);
}
logMessage("服务器启动成功");
实际场景:用户名、标题、描述、API 地址等文本数据。
number
数字类型,包含整数、浮点数、十六进制、二进制、八进制等。
let age: number = 25;
let price: number = 99.9;
let hex: number = 0xff; // 255
let binary: number = 0b1010; // 10
let octal: number = 0o755; // 493
// 计算时会自动类型推断
let total = price * 2; // TypeScript 自动推断 total 为 number 类型
实际场景:年龄、价格、数量、ID、时间戳等数值数据。
boolean
只有两个值:true 和 false。
let isLoggedIn: boolean = true;
let isAdmin: boolean = false;
let isActive: boolean = true;
// 常用于条件判断
if (isLoggedIn) {
console.log("已登录");
}
// 函数返回布尔值
function checkPermission(role: string): boolean {
return role === "admin";
}
实际场景:开关状态、权限标识、数据是否加载完成等。
null 和 undefined
在 TypeScript 中,null 和 undefined 是独立的类型,但需要注意严格模式下的行为。
// 默认情况下,null 和 undefined 可以赋值给任何类型
let name: string = "张三";
name = null; // 不报错(在非严格模式下)
name = undefined; // 不报错(在非严格模式下)
但在实际项目中,我们强烈建议开启 strict: true(tsconfig.json 中的配置),开启后,null 和 undefined 只能赋值给它们自己的类型或联合类型:
// 开启 strict 后
let name: string = "张三";
// name = null; // ❌ 报错
// 如果确实需要可空,使用联合类型
let nullableName: string | null = "张三";
nullableName = null; // ✅ 允许
实际场景:null 和 undefined 通常用于表示“没有值”,但在 TypeScript 中推荐用 undefined 表示未定义,用 null 表示有意为空。
any —— 万能“逃生通道”
any 表示“任意类型”,相当于关闭了该变量的类型检查。
let something: any = "hello";
something = 123; // ✅ 不报错
something = true; // ✅ 不报错
something = { name: "张三" }; // ✅ 不报错
// 可以调用任何方法,不会有类型提示
something.toUpperCase(); // 运行时报错风险!
问题:使用 any 就失去了 TypeScript 的保护,容易在运行时出现难以追踪的错误。
原则:any 应该作为最后的选择,只在以下场景使用:
- 迁移老项目 JavaScript 代码时临时使用
- 第三方库没有类型定义时的过渡方案
- 确实无法确定类型的特殊场景
更好的做法:使用 unknown(后续章节会介绍),它比 any 更安全。
void —— 表示“没有返回值”
void 用于函数,表示该函数不返回任何值(或返回 undefined / null)。
// 没有 return 语句
function logMessage(msg: string): void {
console.log(msg);
}
// 有 return,但没有返回值
function showAlert(msg: string): void {
console.log(msg);
return;
}
// 如果 return 了其他值,会报错
function wrong(): void {
return 123; // ❌ 报错:类型 number 不能赋值给 void
}
实际场景:日志函数、事件处理函数、副作用函数(只做某件事,不返回结果)。
常见问题
number 和 string 的自动转换
JavaScript 中,number 和 string 在某些操作下会自动转换(如 + 号),但 TypeScript 不会自动转换类型,需要你显式处理。
let num: number = 100;
let str: string = "200";
// ❌ 报错:类型 "string" 不能赋值给类型 "number"
// let result: number = num + str;
// ✅ 显式转换
let result1: number = num + Number(str); // 300
let result2: string = String(num) + str; // "100200"
基础类型速查表
| 类型 | 写法 | 说明 | 示例值 | 使用建议 |
|---|---|---|---|---|
| 字符串 | : string |
文本字符串 | "hello", 'world', `hi` |
文本数据都用它 |
| 数字 | : number |
整数和浮点数 | 42, 3.14, -10, 0xff |
数值数据都用它 |
| 布尔值 | : boolean |
真 / 假 | true, false |
开关标识都用它 |
| 空值 | : null |
有意为空 | null |
联合类型中使用 |
| 未定义 | : undefined |
未赋值 | undefined |
联合类型中使用 |
| 任意类型 | : any |
关闭类型检查 | 任何值 | 尽量少用,最后选择 |
| 无返回值 | : void |
函数不返回任何值 | 无 | 无返回值的函数 |
null和undefined在开启strict: true后不能直接赋值给其他类型,需要通过联合类型(如string | null)使用。any会失去类型保护,非必要不使用。