一、前言
TypeScript 是 JavaScript 的一个超集,它通过添加静态类型系统帮助开发者写出更健壮、可维护性更强的代码。而理解 TypeScript 的基本类型 是学习 TypeScript 的第一步。
本文将带你全面了解 TypeScript 中的常用基本类型,包括:
- ✅ 数值类型
- ✅ 字符串类型
- ✅ 布尔类型
- ✅ null 与 undefined
- ✅ any 与 unknown
- ✅ never 与 void
- ✅ 数组类型
- ✅ 元组类型
并通过大量代码示例帮助你掌握其使用方式。
二、TypeScript 是什么?
✅ 定义:
TypeScript 是由微软开发的一种开源编程语言,它是 JavaScript 的超集,增加了 静态类型检查机制 和面向对象特性。
⚠️ 核心优势:
- 编译时错误检测,减少运行时错误
- 提供更好的代码提示与重构支持
- 支持现代 JS 特性及未来提案
三、TypeScript 基本类型一览
| 类型 | 示例 | 描述 |
|---|---|---|
number | let age: number = 25; | 所有数字类型(整数/浮点) |
string | let name: string = "Tom"; | 字符串类型 |
boolean | let isDone: boolean = true; | 布尔类型 |
null | let value: null = null; | 空值 |
undefined | let x: undefined = undefined; | 未定义值 |
any | let data: any = "任意类型"; | 不进行类型检查 |
unknown | let input: unknown; | 需要显式类型检查 |
never | function error(): never { throw new Error(); } | 永不返回的函数 |
void | function sayHello(): void { console.log("Hello"); } | 表示无返回值 |
array | let list: number[] = [1, 2, 3]; | 数组类型 |
tuple | let person: [string, number] = ["Tom", 25]; | 固定长度、固定类型的数组 |
四、数值类型 number
TypeScript 中所有数字都属于 number 类型,包括整数、浮点数、十六进制、八进制、二进制等。
let age: number = 25;
let price: number = 9.99;
let hex: number = 0xf00d;
let binary: number = 0b1010;
五、字符串类型 string
字符串类型用于表示文本信息,可以用单引号或双引号定义。
let name: string = "Alice";
let message: string = `欢迎,${name}`;
console.log(message); // 输出:欢迎,Alice
六、布尔类型 boolean
布尔类型只有两个值:true 和 false,常用于条件判断。
let isLogin: boolean = false;
if (isLogin) {
console.log("用户已登录");
} else {
console.log("请先登录");
}
七、null 与 undefined
这两个类型分别表示“空值”和“未定义”,它们是所有类型的子类型。
let user: string | null = null; // 可为 null 的字符串
let score: number | undefined = undefined; // 可为 undefined 的数值
// 使用场景:异步获取数据
function fetchData(): string | null {
return null;
}
八、any 类型
any 类型表示允许该变量为任意类型,相当于关闭了类型检查。
⚠️ 虽然方便,但应谨慎使用!
let value: any = "字符串";
value = 123;
value = true;
value.someMethod(); // 不会报错,但可能运行时报错
九、 unknown 类型
unknown 是 any 的安全替代方案。使用前必须进行类型检查。
let input: unknown;
input = "hello";
input = 123;
if (typeof input === "string") {
console.log(input.toUpperCase());
} else if (typeof input === "number") {
console.log(input.toFixed(2));
}
十、never 类型
never 表示永远不会发生值的类型,常见于抛出异常或无限循环的函数。
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
十一、 void 类型
void 表示没有返回值的函数,或者变量不能赋任何值(除了 undefined)。
function sayHello(): void {
console.log("Hello");
}
let result: void = undefined;
十二、数组类型
TypeScript 支持两种方式声明数组类型:
✅ 方式一:元素类型后加 []
let numbers: number[] = [1, 2, 3];
✅ 方式二:泛型语法 Array<元素类型>
let fruits: Array<string> = ["apple", "banana"];
十三、元组类型 tuple
元组表示一个已知数量和类型的数组,每个位置上的类型是固定的。
let person: [string, number] = ["Tom", 25];
// 错误写法:
person[1] = "25"; // 报错:不能将类型 'string' 分配给类型 'number'
十四、实际应用场景示例
✅ 示例1:用户登录状态管理
type User = {
id: number;
username: string;
isLoggedIn: boolean;
lastLogin?: Date; // 可选属性
};
const currentUser: User = {
id: 1,
username: "admin",
isLoggedIn: true
};
✅ 示例2:处理 API 返回数据
function fetchUserData(): string | null {
const response = Math.random() > 0.5 ? "{id: 1}" : null;
return response;
}
const userData = fetchUserData();
if (userData !== null) {
console.log(JSON.parse(userData));
}
十五、注意事项与最佳实践
| 场景 | 建议 |
|---|---|
是否推荐使用 any? | ❌ 不推荐,除非确实需要动态类型 |
如何替代 any? | ✅ 推荐使用 unknown 或具体类型 |
null vs undefined | ✅ 明确区分使用场景 |
| 是否可以修改元组长度? | ❌ 不推荐,元组长度应固定 |
| 是否推荐类型推断? | ✅ 推荐使用类型推断提高代码简洁性 |
十六、总结对比表:TypeScript 基本类型一览
| 类型 | 示例 | 是否推荐使用 | 说明 |
|---|---|---|---|
number | let age: number = 25; | ✅ 是 | 所有数字类型 |
string | let name: string = "Tom"; | ✅ 是 | 字符串 |
boolean | let isOk: boolean = true; | ✅ 是 | 布尔值 |
null | let val: null = null; | ✅ 是 | 空值 |
undefined | let x: undefined = undefined; | ✅ 是 | 未定义 |
any | let data: any = "任意类型"; | ❌ 否 | 应尽量避免 |
unknown | let input: unknown; | ✅ 是 | 安全替代 any |
never | function error(): never { throw new Error(); } | ✅ 是 | 永不返回值 |
void | function log(): void {} | ✅ 是 | 无返回值 |
array | let list: number[] = [1, 2, 3]; | ✅ 是 | 数组 |
tuple | let person: [string, number] = ["Tom", 25]; | ✅ 是 | 固定类型和顺序 |
十七、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!