乐闻世界logo
搜索文章和话题

TypeScript 如何对定义函数进行重载?

2 个月前提问
1 个月前修改
浏览次数19

1个答案

1

在TypeScript中定义函数重载允许你为同一个函数提供多个函数类型定义。这样做可以让你的函数调用更加灵活,同时保持类型安全。下面,我将通过一个例子来展示如何在TypeScript中定义和实现函数重载。

首先,你需要在函数实现之前声明所有的重载签名。然后,你实现一个函数体,这个函数体必须能够处理所有的重载情况。

例如,假设我们有一个函数 add,这个函数可以接受两个数字或者两个字符串,并将它们相加。如果输入的是数字,它返回数字的和;如果输入的是字符串,它则返回字符串的拼接。这里是如何定义这个函数的重载的:

typescript
// 函数重载签名 function add(x: number, y: number): number; function add(x: string, y: string): string; // 函数实现 function add(x: any, y: any): any { if (typeof x === "number" && typeof y === "number") { return x + y; // 处理数字相加 } else if (typeof x === "string" && typeof y === "string") { return x + y; // 处理字符串拼接 } throw new Error('Invalid arguments. Both arguments must be either numbers or strings.'); } // 使用函数 console.log(add(5, 10)); // 输出: 15 console.log(add("Hello, ", "world!")); // 输出: "Hello, world!"

在上面的代码中,add 函数首先定义了两个重载签名:

  • 一个是接受两个 number 类型的参数并返回一个 number 类型的结果。
  • 另一个是接受两个 string 类型的参数并返回一个 string 类型的结果。

真正的函数实现 (function add(x: any, y: any): any) 使用了类型检查来决定执行哪种加法操作。这个实现需要能够处理所有声明的重载情况。注意,实现部分不对外暴露,只有重载签名才是对外的接口。

使用重载能够清晰地让使用者知道哪些参数组合是被允许的,同时也保持了实现的灵活性和复用性。这在构建大型项目时特别有用,可以提高代码的可维护性和可理解性。

2024年8月2日 13:45 回复

你的答案