"函数重载是 TypeScript 中一项非常有用的功能,它允许我们为同一个函数提供多个不同的函数签名。通过函数重载,我们可以根据不同的参数类型和数量来调用不同的函数实现。
在 TypeScript 中,实现函数重载需要使用函数签名和函数体分离的方式。我们首先定义多个函数签名,然后再定义对应的函数实现。当调用函数时,TypeScript 编译器会根据传入的参数类型和数量,自动匹配对应的函数签名和函数实现。
下面是一个示例,演示了如何在 TypeScript 中实现函数重载:
// 定义函数签名
function add(a: number, b: number): number; // 函数签名 1
function add(a: string, b: string): string; // 函数签名 2
// 定义函数实现
function add(a: number | string, b: number | string): number | string {
if (typeof a === 'number' && typeof b === 'number') {
return a + b; // 函数实现 1
} else if (typeof a === 'string' && typeof b === 'string') {
return a.concat(b); // 函数实现 2
} else {
throw new Error('参数类型不匹配'); // 参数类型不匹配时抛出错误
}
}
// 调用函数
console.log(add(1, 2)); // 输出: 3
console.log(add('Hello', 'World')); // 输出: HelloWorld
在上面的例子中,我们定义了两个函数签名和一个函数实现。第一个函数签名表示接受两个 number 类型的参数,并返回一个 number 类型的结果;第二个函数签名表示接受两个 string 类型的参数,并返回一个 string 类型的结果。
在函数实现中,我们首先使用 typeof 运算符判断参数的类型,然后根据类型执行对应的操作。如果参数类型不匹配,则抛出一个错误。
通过这种方式,我们可以根据传入的参数类型和数量来调用不同的函数实现。TypeScript 编译器会根据函数签名进行类型推断,从而提供更好的类型检查和代码提示。
总结起来,函数重载是 TypeScript 中一项非常有用的功能,它可以根据不同的参数类型和数量来调用不同的函数实现。通过函数签名和函数体分离的方式,我们可以在 TypeScript 中轻松实现函数重载。"