在TypeScript中是如何实现函数重载的?

在TypeScript中,函数重载是指在同一个函数名下定义多个函数类型声明,以便根据传入的参数类型和数量的不同,执行不同的操作。然而,需要注意的是,TypeScript的函数重载只是类型系统的特性,它并不会为函数生成多个不同的运行时代码。在运行时,仍然只能有一个函数实现。

以下是一个简单的TypeScript函数重载的示例:

function combine(input1: number, input2: number): number;
function combine(input1: string, input2: string): string;

function combine(input1: any, input2: any) {
    if (typeof input1 === "number" && typeof input2 === "number") {
        return input1 + input2;
    }
    if (typeof input1 === "string" && typeof input2 === "string") {
        return input1.concat(input2);
    }
    return input1.toString().concat(input2.toString());
}

// 使用示例
const result1 = combine(10, 20); // 返回数字 30
const result2 = combine("Hello, ", "World!"); // 返回字符串 "Hello, World!"

在这个例子中,我们为combine函数定义了两个重载声明:一个接受两个数字参数并返回一个数字,另一个接受两个字符串参数并返回一个字符串。然后,我们定义了一个实际的combine函数,它接受两个any类型的参数,并根据参数的实际类型执行不同的操作。

需要注意的是,虽然这个示例中的重载看起来像是“真正的”重载,但在运行时,仍然只有一个combine函数。TypeScript编译器会根据调用combine函数时提供的参数类型来检查哪个重载声明是适用的,并据此进行类型检查。但是,在运行时,所有的重载都会退化为实际的combine函数实现。

因此,在设计TypeScript函数重载时,需要确保实际的函数实现能够处理所有可能的参数类型和组合,以避免运行时错误。

posted @ 2025-01-05 06:14  王铁柱6  阅读(25)  评论(0编辑  收藏  举报