TypeScript 支持函数重载,这是 TypeScript 提供的一种方式,可以让同一个函数名支持多种参数列表。不过,要实现函数重载,我们需要编写重载签名和一个兼容所有重载签名的实现。
让我给您一个简单的例子来说明这个概念:
假设我们有一个函数 getInfo
,它可以接受一个数字或者一个字符串作为参数,如果是数字,我们假定是用户的 ID 并返回用户的详细信息;如果是字符串,我们假定是用户的名称并返回用户的简介。
我们可以这样定义重载:
typescript// 函数重载签名 function getInfo(id: number): string; // 传入数字时,获取用户详细信息 function getInfo(name: string): string; // 传入字符串时,获取用户简介 // 函数实现 function getInfo(data: any): string { if (typeof data === "number") { return `Fetching user details for ID: ${data}`; } else if (typeof data === "string") { return `Fetching user intro for name: ${data}`; } throw new Error("Function must be called with either a string or a number"); } // 使用函数重载 console.log(getInfo(101)); // 输出: Fetching user details for ID: 101 console.log(getInfo("John")); // 输出: Fetching user intro for name: John
在这个例子中,我们首先定义了两个函数签名:一个接受数字参数,另一个接受字符串参数。然后我们实现了一个 getInfo
函数,它用一个更宽松的参数类型 any
来实现具体的功能。函数内部使用 typeof
检查来决定处理逻辑。
通过这种方式,我们可以明确地告诉使用此函数的开发者,函数预期接收什么类型的参数,并且根据参数类型执行不同的操作,同时保持函数名的一致性,提高代码的可读性和可维护性。