TypeScript 函数重载
函数重载是一种创建具有相同名称但参数类型和返回类型不同的多个方法的机制或能力。但是,它们的参数数量可以相同。函数重载也被称为方法重载。
当满足以下条件时,允许函数/方法重载:
- 函数名称相同
- 每个重载函数的参数数量不同
- 参数数量相同,但其类型不同
- 所有重载函数必须具有相同的返回类型
假设我们需要执行不同数量参数的数字的乘法运算。我们编写两个方法,mul_a(数字,数字)用于两个参数,mul_b(数字,数字,数字)用于三个参数。现在,由于方法的名称不同,我们和其他程序员可能难以理解该方法的行为。在这种情况下,我们需要使用函数重载来提高程序的可读性。
函数重载的优势
- 节省内存空间,使程序执行更快
- 提供可重用的代码,节省时间和精力
- 提高程序的可读性
- 代码维护简单
示例
//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));
在上面的示例中:
- 第一和第二行是函数重载声明。它有两个重载:
- 一个接受字符串参数的函数。
- 一个接受数字参数的函数。
- 第三行是函数定义,其中参数的数据类型设置为
any
。 - 最后两个语句调用了重载的函数。
在编译上述TypeScript程序后,我们将得到以下JavaScript代码。
//Function Definition
function add(a, b) {
return a + b;
}
//Result
console.log("Addition: " + add("Hello ", "JavaTpoint"));
console.log("Addition: " + add(30, 20));
将下面的英文翻译成中文,不解释,保留HTML格式:
输出:
在类中的函数重载
以下示例有助于理解类中的方法重载的用法。
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);
}