TypeScript 基础指南:函数重载(Function Overloading)

函数重载(Function Overloading)是 TypeScript 中的一个高级特性,它允许开发者为同一个函数名定义多个函数签名。这些函数签名可以有不同的参数类型和返回类型。 在 TypeScript 中,函数重载的基本语法如下:

function functionName(parameter1: type1, parameter2: type2, ...): returnType;
function functionName(parameter1: type3, parameter2: type4, ...): returnType;
// 函数体实现
function functionName(parameter1: any, parameter2: any, ...): any {
  // 函数体
}

在这个例子中,我们为同一个 functionName 函数定义了两个重载签名。第一个签名接受 type1 和 type2 类型的参数,第二个签名接受 type3 和 type4 类型的参数。两个签名都返回相同的 returnType 类型。 函数体实现部分是使用 TypeScript 的联合类型语法 parameter1: any, parameter2: any, ... 来定义参数类型。这允许函数接受任意类型的参数,并根据调用时的实际参数类型来确定执行哪个重载签名。 下面是一个具体的例子:

function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: any, b: any): any {
  return a + b;
}

console.log(add(1, 2)); // 输出: 3
console.log(add('hello ', 'world')); // 输出: 'hello world'
console.log(add(true, false)); // 输出: 'truefalse'

在这个例子中:

1.
我们定义了一个 add 函数,它有两个重载签名:一个接受两个 number 类型参数,返回 number 类型;另一个接受两个 string 类型参数,返回 string 类型。
2.
函数体实现部分使用 any 类型来定义参数和返回值,因为它需要处理不同类型的输入。
3.
根据实际调用时的参数类型,TypeScript 会选择合适的重载签名来执行相应的逻辑。
函数重载的主要用途包括:
提高代码可读性和可维护性
使用重载可以为同一个函数提供多个更具语义化的签名。
处理不同输入类型
重载可以让函数根据输入参数的类型执行不同的逻辑。
与其他 TypeScript 特性配合使用
重载可以与联合类型、类型守卫等特性结合使用,增强类型系统的表达能力。

需要注意的是,函数重载的实现部分必须能够处理所有可能的参数类型。如果无法为所有重载签名提供一个通用的实现,就不应该使用函数重载。 总之,函数重载是 TypeScript 中一个强大的特性,可以帮助开发者编写更加灵活和健壮的代码。合理使用函数重载可以提高代码的可读性和可维护性。