TypeScript 基础类型详解
TypeScript 的类型系统是其核心优势,它提供了比 JavaScript 更严格、更安全的类型检查。以下是 TypeScript 中最常用的基础类型(primitive types 和常用组合类型),全部基于 TypeScript 5.x 版本。
1. 基本原始类型(Primitives)
| 类型 | 描述 | 示例代码 | 说明 |
|---|---|---|---|
boolean | 布尔值 | let isActive: boolean = true; | 只有 true 和 false |
number | 数字(包括整数、浮点数) | let age: number = 30;let pi: number = 3.14; | 支持 NaN、Infinity |
bigint | 大整数(ES2020+) | let big: bigint = 100n; | 末尾加 n |
string | 字符串 | let name: string = "Alice";let greeting: string =Hi ${name}; | 支持模板字符串 |
undefined | 未定义 | let u: undefined = undefined; | 严格模式下需注意 |
null | 空值 | let n: null = null; | 与 undefined 不同 |
symbol | 唯一标识符 | let sym: symbol = Symbol("id"); | 常用于对象属性键 |
2. any 类型(万能类型)
let anything: any = 4;
anything = "string"; // 任意类型都可赋值
anything = true; // 不会报错
anything.bark(); // 也不会报错(但运行时可能出错)
注意:
any会关闭类型检查,不推荐滥用。尽量使用unknown替代。
3. unknown 类型(更安全的 any)
let unknownValue: unknown = 4;
// unknownValue.toFixed(); // 错误:必须先检查类型
if (typeof unknownValue === "number") {
console.log(unknownValue.toFixed(2)); // OK
}
unknown 强制你进行类型检查或断言,安全性远高于 any。
4. 数组类型(Array)
两种写法等价:
let numbers1: number[] = [1, 2, 3]; // 推荐
let numbers2: Array<number> = [1, 2, 3]; // 泛型写法
只读数组:
let readonlyArr: ReadonlyArray<number> = [1, 2, 3];
// readonlyArr.push(4); // 错误:只读
5. 元组类型(Tuple)
固定长度、固定类型顺序的数组:
let person: [string, number] = ["Alice", 30];
// person[2] = "extra"; // 错误:长度固定
// 可选元素(TS 4.0+)
let optionalTuple: [string, number?] = ["Bob"];
6. 对象类型(Object)
推荐使用 interface 或 type 定义对象结构:
// 使用 interface
interface User {
name: string;
age: number;
isAdmin?: boolean; // 可选
readonly id: number; // 只读
}
let user: User = {
name: "Charlie",
age: 28,
id: 1
};
// 使用 type(更灵活)
type Point = {
x: number;
y: number;
};
let p: Point = { x: 10, y: 20 };
7. 联合类型(Union Types)
一个值可以是多种类型之一:
let id: string | number = 123;
id = "abc"; // OK
function printId(id: string | number) {
if (typeof id === "string") {
console.log(id.toUpperCase());
} else {
console.log(id.toFixed(2));
}
}
8. 字面量类型(Literal Types)
限制值为具体字面量:
type Status = "success" | "error" | "loading";
let state: Status = "success"; // 只能是这三个值
type YesNo = true | false;
type Zero = 0;
9. 枚举(Enums)
定义一组命名常量:
enum Direction {
Up, // 默认 0
Down, // 1
Left, // 2
Right // 3
}
let dir: Direction = Direction.Up;
console.log(Direction[0]); // "Up"(反向映射)
字符串枚举(推荐):
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
10. void 类型
表示函数无返回值:
function log(message: string): void {
console.log(message);
}
11. never 类型
表示永远不会正常返回:
function throwError(msg: string): never {
throw new Error(msg);
}
function infiniteLoop(): never {
while (true) {}
}
12. 内置实用类型(Utility Types)——常用基础工具
| 类型 | 作用 | 示例 |
|---|---|---|
Partial<T> | 所有属性变为可选 | Partial<User> |
Required<T> | 所有属性变为必选 | Required<User> |
Readonly<T> | 所有属性变为只读 | Readonly<User> |
Pick<T, K> | 挑选部分属性 | Pick<User, "name" | "age"> |
Omit<T, K> | 排除部分属性 | Omit<User, "id"> |
Record<K, T> | 创建键值类型对象 | Record<string, number> |
小结:常用类型速查
| 场景 | 推荐类型写法 |
|---|---|
| 数字 | number |
| 字符串 | string |
| 布尔 | boolean |
| 数组 | T[] 或 Array<T> |
| 对象 | interface 或 type |
| 多种可能 | A | B |
| 固定值 | "success" | "error" |
| 无返回值函数 | void |
| 永远不返回 | never |
| 任意类型(谨慎) | unknown(推荐) > any |
如果您想深入某个类型(如泛型、交叉类型、类型守卫、条件类型等),或者需要具体示例代码,请告诉我!