函数签名

1 阅读2分钟

在 TypeScript 中,函数签名 就像是给函数定下的一份“契约”或“说明书”。它的核心作用是明确描述一个函数接受什么类型的参数,以及返回什么类型的值

简单来说,函数签名就是函数的“类型”。在 TypeScript 中,我们通常通过以下两种主要方式来定义函数签名:

1. 使用类型别名(type

这是最常见且推荐的方式,适合定义可以复用的函数类型。

// 定义一个函数签名:接受两个 number 参数,返回一个 number
type AddFunction = (a: number, b: number) => number;

// 使用这个签名来约束一个具体的函数
const add: AddFunction = (x, y) => {
  return x + y;
};

console.log(add(10, 5)); // 输出 15

在这个例子中,(a: number, b: number) => number 就是函数签名。它告诉 TypeScript:任何符合 AddFunction 类型的函数,都必须接收两个数字,并且返回一个数字。

2. 使用接口(interface

接口也可以用来描述函数类型,这被称为“调用签名”。

// 使用接口定义函数签名
interface SearchFunc {
  (source: string, subString: string): boolean;
}

// 使用这个接口来约束函数
let mySearch: SearchFunc;
mySearch = function (src, sub) {
  return src.search(sub) > -1;
};

这里的 (source: string, subString: string): boolean 就是接口中的函数签名。

为什么需要函数签名?

你可以把函数签名理解为一种强制性的“合同”

  • 类型安全: 它确保了函数在调用时,传入的参数和预期的返回值都是正确的类型。如果你传了字符串给需要数字的参数,TypeScript 会在编译阶段直接报错,而不是等到程序运行时才崩溃。
  • 代码即文档: 看到函数签名,开发者一眼就能知道这个函数该怎么用,不需要去阅读具体的内部实现逻辑。
  • 智能提示: 现代编辑器(如 VS Code)会根据函数签名提供精准的代码补全和参数提示,极大提升开发效率。