1️⃣ 基础类型
number、string、booleannull、undefinedany:万金油类型,随便放啥都行unknown:比any安全,先检查类型才能用void:通常用于函数没有返回值never:永远不会返回,用于抛错或无限循环- 元组(tuple):固定长度、固定类型数组
let point: [number, number] = [10, 20];
- 数组:
let arr: number[] = [1, 2, 3];
2️⃣ 函数类型
- 参数类型和返回类型:
function add(a: number, b: number): number {
return a + b;
}
- 可选参数 & 默认参数
function greet(name?: string) { ... }
function greet(name = "Logan") { ... }
- 剩余参数
function sum(...nums: number[]) { ... }
3️⃣ 对象类型
- 接口(interface)
interface Person {
name: string;
age: number;
}
- 类型别名(type)
type Point = { x: number, y: number };
- 可选属性 & 只读属性
interface Person {
readonly id: number;
name?: string;
}
4️⃣ 枚举(enum)
给固定值起名字。
5️⃣ 泛型(generics)
之前讲过:类型参数化,灵活又安全。
6️⃣ 联合类型 & 交叉类型
- 联合类型:一个值可以是多种类型
let value: string | number;
- 交叉类型:组合多个类型
type A = { name: string };
type B = { age: number };
type C = A & B; // { name: string, age: number }
7️⃣ 类型保护 & 类型断言
- 类型保护:根据条件判断类型
if (typeof value === "string") { ... }
- 类型断言:告诉 TS 我知道这个类型
let someValue: any = "hello";
let strLength = (someValue as string).length;
8️⃣ 类与继承
class Animal {
constructor(public name: string) {}
move() { console.log(`${this.name} is moving`) }
}
class Dog extends Animal {
bark() { console.log("Woof!") }
}
- 可以加
public、private、protected修饰符 - 支持接口实现
implements
9️⃣ 模块化
export和import,TS 支持 ES 模块,方便拆分代码
🔟 高级类型(可选,进阶)
- 条件类型:
T extends U ? X : Y - 映射类型:把类型映射成另一个类型
- 索引类型:
keyof和typeof
💡 小结:
学习顺序可以这样:
基础类型 → 函数/对象 → 枚举/泛型 → 联合/交叉 → 类 → 模块 → 高级类型