📅  最后修改于: 2021-01-11 12:43:26             🧑  作者: Mango
函数重载是一种机制或能力,可以创建具有相同名称但参数类型和返回类型不同的多个方法。但是,它可以具有相同数量的参数。函数重载也称为方法重载。
在以下情况下允许函数/方法重载:
假设我们必须对数字进行乘法运算,它具有不同数量的参数。我们为这两个参数编写了两个方法,例如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);
}