Skip to content

函数类型(function)

在 TypeScript 中,函数类型允许你指定函数的参数类型和返回值类型。这有助于确保函数按照预期的方式被调用,并且可以提高代码的可读性和安全性。定义函数类型的几种方式如下:

函数声明

当你声明一个函数时,可以直接为参数和返回值指定类型:

typescript
function add(x: number, y: number): number {
  return x + y;
}

在这个例子中,add 函数接受两个 number 类型的参数,并返回一个 number 类型的值。

匿名函数表达式

如果你使用的是匿名函数(例如作为回调函数),你可以像这样指定类型:

typescript
let myAdd: (x: number, y: number) => number = function (
  x: number,
  y: number
): number {
  return x + y;
};

这里,myAdd 是一个函数变量,它被赋予了一个匿名函数,该匿名函数有两个 number 类型的参数并返回一个 number 类型的值。

箭头函数

箭头函数是 ES6 引入的一种更简洁的函数写法,TypeScript 也支持它们,并允许指定类型:

typescript
const multiply = (x: number, y: number): number => x * y;

函数类型别名

你可以创建一个类型别名来描述函数类型,这在你需要多次使用相同的函数签名时非常有用:

typescript
type MathFunc = (a: number, b: number) => number;

let add: MathFunc = (x, y) => x + y;
let subtract: MathFunc = (x, y) => x - y;

可选参数、默认参数和剩余参数

  • 可选参数:可以通过在参数后面添加 ? 来标记参数为可选。

    typescript
    function buildName(firstName: string, lastName?: string): string {
      if (lastName) {
        return firstName + " " + lastName;
      } else {
        return firstName;
      }
    }
  • 默认参数:可以在参数定义后给出一个默认值,如果调用时没有提供这个参数,则会使用默认值。

    typescript
    function buildName(firstName: string, lastName: string = "Smith"): string {
      return firstName + " " + lastName;
    }
  • 剩余参数:使用 ... 操作符收集不定数量的参数为一个数组。

    typescript
    function push(array: any[], ...items: any[]): void {
      items.forEach((item) => array.push(item));
    }

函数重载

有时你可能想要为同一个函数提供多个不同的签名。这被称为函数重载,允许你根据传入的不同参数类型或数量提供不同的实现逻辑。

typescript
function makeDate(timestamp: number): Date;
function makeDate(m: number, d: number, y: number): Date;
function makeDate(mOrTimestamp: number, d?: number, y?: number): Date {
  if (d !== undefined && y !== undefined) {
    return new Date(y, mOrTimestamp, d);
  } else {
    return new Date(mOrTimestamp);
  }
}

// 使用重载:
const d1 = makeDate(12345678); // 使用 timestamp 参数
const d2 = makeDate(5, 5, 2020); // 使用 m, d, y 参数

以上就是 TypeScript 中定义和使用函数类型的一些常见方法。通过这些特性,你可以编写更加健壮和易于维护的代码。

Released under the MIT License.