TypeScript函数重载
函数重载是创建多个方法的机制或能力,这些方法具有相同的名称但参数类型和返回类型不同。但是,它可以具有相同数量的参数。函数重载也称为方法重载。
当以下条件满足时允许函数/方法重载:
- 函数名相同
 - 在每个重载函数中参数数量不同。
 - 参数数量相同,它们的类型不同。
 - 所有重载函数必须具有相同的返回类型。
 
假设我们必须执行具有不同参数数量的数字的乘法。 我们编写两种方法,例如mul_a(number, number)用于两个参数,并且mul_b(number, number, number)用于三个参数。 现在,我们以及其他程序员可能难以理解该方法的行为,因为它的名称不同。在这种情况下需要使用函数重载,这将增加程序的可读性。
函数重载的优点
- 它节省内存空间,使程序执行更快。
 - 它提供了代码重用,节省时间和精力。
 - 它增加了程序的可读性。
 - 代码维护很容易。
 
示例
//Function with string type parameter
function add(a:string, b:string): string;
//Function with number type parameter
function add(a:number, b:number): number;
//Function Definition
function add(a: any, b:any): any {
    return a + b;
}
//Result
console.log("Addition: " +add("Hello ", "JavaTpoint")); 
console.log("Addition: "+add(30, 20));
在上面的示例中:
- 前两行是函数重载声明。 它具有两个重载:
- 接受字符串参数的函数。
 - 接受数字参数的函数。
 
 - 第三行是函数定义,其中设置参数的数据类型为任何。
 - 最后两个语句调用了重载的函数。
 
编译上述TypeScript程序后,我们将得到以下JavaScript代码。
//Function Definition
function add(a, b) {
    return a + b;
}
//Result
console.log("Addition: " + add("Hello ", "JavaTpoint"));
console.log("Addition: " + 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 of String: " +obj.foo("JavaTpoint"));
编译上述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 of String: " + obj.foo("JavaTpoint"));
输出:

不支持具有不同数量和类型的参数以及相同函数名称的函数重载。
示例
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);
}
极客教程