TypeScript函数重载 – TypeScript开发教程

上一章TypeScript教程请查看:TypeScript箭头函数用法详解
函数重载是一种机制,可以创建多个同名但参数类型和返回类型不同的方法。但是,它可以有相同数量的参数。函数重载也称为方法重载。
在以下情况下,允许函数/方法重载:

  • 函数名是相同的
  • 每个重载函数的参数数量是不同的。
  • 参数的数量相同,但类型不同。
  • 所有重载函数必须具有相同的返回类型。
假设我们要执行数的乘法,它有不同数量的参数。我们为两个参数编写两个方法,如mul_a(number, number),为三个参数编写mul_b(number, number, number)。现在,我们和其他程序员可能很难理解这个方法的行为,因为它的名称不同。在这种情况下,我们需要使用函数重载,这增加了程序的可读性。
函数重载的优点
  • 它节省了内存空间,使程序执行变得更快。
  • 它提供了代码可重用性,从而节省了时间和精力。
  • 它增加了程序的可读性。
  • 代码维护很容易。
例子
//带有字符串类型参数的函数 function add(a:string, b:string): string; //带有数字类型参数的函数 function add(a:number, b:number): number; //函数定义 function add(a: any, b:any): any { return a + b; } //Result console.log("加法: " +add("Hello ", "srcmini")); console.log("加法: "+add(30, 20));

在上面的例子中:
  • 前两行是函数重载声明,它有两个重载:
  • 接受字符串参数的函数。
  • 接受数字参数的函数。
  • 第三行是函数定义,其中参数的数据类型设置为any。
  • 最后两条语句调用重载函数。
编译完上述TypeScript程序后,我们将得到以下JavaScript代码。
//函数定义 function add(a, b) { return a + b; } //Result console.log("加法: " + add("Hello ", "srcmini")); console.log("加法: " + add(30, 20));

类中的函数重载下面的示例有助于理解类中方法重载的使用。
class A { public foo(s: string): number; public foo(n: number): string; public foo(arg: any): any { if (typeof(arg) === 'number') return arg.toString(); if (typeof(arg) === 'string') return arg.length; } } let obj = new A(); console.log("Result: " +obj.foo(101)); console.log("Length: " +obj.foo("srcmini"));

编译完上述TypeScript程序后,我们将得到以下JavaScript代码。
class A { foo(arg) { if (typeof (arg) === 'number') return arg.toString(); if (typeof (arg) === 'string') return arg.length; } } let obj = new A(); console.log("Result: " + obj.foo(101)); console.log("Length: " + obj.foo("srcmini"));

不支持使用不同数量的参数和不同类型以及相同函数名的函数重载。
【TypeScript函数重载 – TypeScript开发教程】例子
function display(x:number, y:number):void //Compiler Error: Duplicate function implementation { console.log(x + x); }function display(x:string): void //Compiler Error: Duplicate function implementation { console.log(x); }

    推荐阅读