第3章:函数
函数重载
什么是函数重载?
函数重载(Function Overloading)允许你为一个函数提供多个类型定义,使得该函数可以根据不同的参数类型或数量执行不同的逻辑。TypeScript 的函数重载通过声明多个函数签名(不包含实现)和一个实现签名(包含具体实现)来完成。
基本语法
// 重载签名(类型声明)
function greet(name: string): string;
function greet(age: number): string;
function greet(isMorning: boolean): string;
// 实现签名(实际函数体)
function greet(value: string | number | boolean): string {
if (typeof value === "string") {
return `Hello, ${value}!`;
} else if (typeof value === "number") {
return `You are ${value} years old.`;
} else {
return value ? "Good morning!" : "Good evening!";
}
}
使用场景
- 参数类型不同:如
string和number输入对应不同返回类型。 - 参数数量不同:如可选参数或剩余参数场景。
- 提高类型安全性:明确约束输入输出类型关系。
注意事项
- 实现签名必须兼容所有重载签名:参数和返回类型需覆盖所有可能情况。
- 编译器仅检查重载签名:调用时以最前面的匹配签名为准。
- 避免过度使用:简单的联合类型可能比重载更清晰。
实际案例
// 重载:字符串拼接或数字相加
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
function combine(a: any, b: any): any {
return a + b;
}
combine("Hello", "World"); // 返回 "HelloWorld"
combine(1, 2); // 返回 3
combine(1, "2"); // 编译错误(无匹配签名)
与联合类型的区别
| 特性 | 函数重载 | 联合类型参数 |
|---|---|---|
| 适用场景 | 参数类型与返回值有明确映射关系 | 参数类型独立无关时 |
| 类型提示 | 每个重载有独立提示 | 统一提示所有可能类型 |
| 实现复杂度 | 需手动处理所有分支 | 自动推断 |
最佳实践:优先使用联合类型,仅在需要精确区分参数-返回值关系时使用重载。
