适用范围

场景

  • 根据调用函数参数输入的类型不同, 函数返回类型也发生相应改变
    • 要求实现函数的逻辑能够同时处理多个输入类型,并返回不同的类型

不适用范围

  • 不会根据函数形参来选择不同的函数实现
    • js中函数只能实现一次

梗概

  • 函数重载允许你为同一个函数定义多个类型签名,然后根据传入参数的类型来选择正确的函数实现。

注意

  • 实现签名的函数不可被调用,只能调用重载签名

示例

function example(arg: string): string;
function example(arg: number): number;
function example(arg: string | number): string | number {
  if (typeof arg === 'string') {
    return 'string';
  } else {
    return 0;
  }
}

在上面的代码中,我们定义了一个名为 example 的函数,它有两个重载签名。第一个签名接受一个 string 类型的参数,并返回一个 string 类型的值。第二个签名接受一个 number 类型的参数,并返回一个 number 类型的值。 当我们调用这个函数时,TypeScript 会根据传入参数的类型来选择正确的重载签名,并相应地推断出函数的返回类型。

const result1 = example('hello'); // result1 的类型为 string
const result2 = example(123); // result2 的类型为 number