TypeScript 函数重载

摘要:在本教程中,您将学习 TypeScript 中的函数重载。

TypeScript 函数重载简介

函数重载允许您为单个函数定义多个签名,并提供一个实现来处理所有定义的签名。

函数重载使函数能够处理不同类型的参数。此外,TypeScript 编译器使用函数签名执行编译时类型检查以确保类型安全。

请注意,TypeScript 函数重载与其他静态类型语言(如 Java)支持的函数重载不同。

TypeScript 函数重载示例

让我们从一个简单的函数开始,该函数返回两个数字或字符串的总和。

首先,定义重载签名

function add(a: number, b: number): number;
function add(a: string, b: string): string;Code language: TypeScript (typescript)

其次,为 add 函数提供实现

function add(a: any, b: any): any {
    if (typeof a === 'number' && typeof b === 'number') {
        return a + b;
    } else if (typeof a === 'string' && typeof b === 'string') {
        return a + b;
    }
    throw new Error('Invalid arguments');
}Code language: TypeScript (typescript)

第三,使用重载函数

console.log(add(10, 20));  // 30
console.log(add('Hello, ', 'world!'));  // 'Hello, world!Code language: JavaScript (javascript)

带有可选参数的函数重载

重载函数时,必需参数的数量必须相同。如果一个重载的参数比另一个多,则需要将额外的参数设为可选。例如

function sum(a: number, b: number): number;
function sum(a: number, b: number, c: number): number;
function sum(a: number, b: number, c?: number): number {
    if (c) return a + b + c;
    return a + b;
}
Code language: TypeScript (typescript)

sum() 函数接受两个或三个数字。第三个参数是可选的。如果不将其设为可选,则会收到错误。

方法重载

当函数是类的属性时,称为方法。TypeScript 也支持方法重载。例如

class Counter {
  private current = 0;
  count(): number;
  count(target: number): number[];
  count(target?: number): number | number[] {
    if (target) {
      let values: number[] = [];
      for (let start = this.current; start <= target; start++) {
        values.push(start);
      }
      // set current to target
      this.current = target;
      return values;
    }
    return ++this.current;
  }
}
Code language: TypeScript (typescript)

count() 函数可以根据传递给它的参数数量返回数字或数组

let counter = new Counter();

console.log(counter.count()); // return a number
console.log(counter.count(5)); // return an arrayCode language: TypeScript (typescript)

输出

1
[ 1, 2, 3, 4, 5 ]Code language: JSON / JSON with Comments (json)

总结

  • 使用函数重载为单个函数定义多个签名以确保类型安全。
本教程是否有帮助?