跳到主要内容

JavaScript不支持函数重载,但TypeScript是否支持函数重载?

参考答案:

是的,TypeScript 支持函数重载(Function Overloading)。函数重载是一种编程技术,它允许多个函数拥有相同的名字,但参数列表(参数的类型、数量或顺序)不同。

在 TypeScript 中,你可以定义多个同名函数,只要它们的参数类型或数量不同。这样,当你调用这个函数时,TypeScript 会根据传入的参数类型和数量来确定应该调用哪个函数。

以下是一个 TypeScript 函数重载的例子:

function add(a: number, b: number): number;
function add(a: string, b: string): string;

function add(a: any, b: any) {
  if (typeof a === 'number' && typeof b === 'number') {
    return a + b;
  }
  if (typeof a === 'string' && typeof b === 'string') {
    return a.concat(b);
  }
  return undefined;
}

let result1 = add(1, 2);  // 调用第一个函数定义,返回数字 3
let result2 = add('a', 'b');  // 调用第二个函数定义,返回字符串 'ab'

在这个例子中,add 函数有两个重载定义:一个接受两个数字并返回一个数字,另一个接受两个字符串并返回一个字符串。然后,有一个实际的函数实现,它根据传入的参数类型来决定返回什么。

请注意,虽然 TypeScript 支持函数重载,但 JavaScript(TypeScript 的超集)本身并不支持。当 TypeScript 代码被编译成 JavaScript 时,所有的重载函数都会被合并成一个函数,参数类型会被擦除,运行时并不保留这些信息。