上一章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"));
不支持使用不同数量的参数和不同类型以及相同函数名的函数重载。
例子
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);
}
评论前必须登录!
注册