函数签名
函数签名(Function Signature)是 TypeScript 中用来描述函数类型的一种方式。它定义了函数的参数列表以及返回值类型,确保在调用函数时传入正确的参数类型,并且函数会按照预期返回特定类型的值。函数签名对于实现类型安全非常重要。
函数签名的基本结构
一个完整的函数签名由两部分组成:
- 参数列表:包括每个参数的名称和类型。
- 返回值类型:指定函数执行后返回的值的类型。
简单的函数签名示例
typescript
function add(x: number, y: number): number {
return x + y;
}在这个例子中,add 函数有两个 number 类型的参数 x 和 y,并且返回一个 number 类型的值。
匿名函数表达式和箭头函数的函数签名
除了函数声明外,匿名函数表达式和箭头函数也可以有明确的函数签名:
typescript
let multiply = function (a: number, b: number): number {
return a * b;
};
// 或者使用箭头函数
const divide = (a: number, b: number): number => a / b;函数签名的多种表示方法
使用类型别名定义函数类型
你可以通过类型别名来创建可重用的函数类型:
typescript
type MathOperation = (a: number, b: number) => number;
// 或,function 关键字可省略
type MathOperation = function(a: number, b: number): number;
let add: MathOperation = (x, y) => x + y;
let subtract: MathOperation = (x, y) => x - y;接口中的函数签名
接口可以包含函数签名,以定义对象的方法或作为回调函数的类型:
typescript
interface SearchFunc {
(source: string, subString: string): boolean;
}
interface SearchFunc {
reset(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function (source: string, subString: string) {
return source.search(subString) !== -1;
};可选参数、默认参数和剩余参数
可选参数:可以在参数后面加上
?来标记该参数为可选。typescriptfunction buildName(firstName: string, lastName?: string): string { return lastName ? `${firstName} ${lastName}` : firstName; }默认参数:可以为参数提供默认值,如果调用时没有提供该参数,则使用默认值。
typescriptfunction buildName(firstName: string, lastName: string = "Smith"): string { return `${firstName} ${lastName}`; }剩余参数:使用
...操作符收集不定数量的参数为一个数组。typescriptfunction push(array: any[], ...items: any[]): void { items.forEach((item) => array.push(item)); } let arr = []; push(arr, 1, 2, 3); console.log(arr); // 输出: [1, 2, 3]
函数重载
有时你可能想要为同一个函数提供多个不同的签名。这被称为函数重载,允许你根据传入的不同参数类型或数量提供不同的实现逻辑。
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 提供了一种强大而灵活的方式来定义函数的行为,确保代码的类型安全性和可读性。通过理解如何定义和使用这些签名,你可以编写出更加健壮和易于维护的代码。