函数类型(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;可选参数、默认参数和剩余参数
可选参数:可以通过在参数后面添加
?来标记参数为可选。typescriptfunction buildName(firstName: string, lastName?: string): string { if (lastName) { return firstName + " " + lastName; } else { return 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)); }
函数重载
有时你可能想要为同一个函数提供多个不同的签名。这被称为函数重载,允许你根据传入的不同参数类型或数量提供不同的实现逻辑。
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 中定义和使用函数类型的一些常见方法。通过这些特性,你可以编写更加健壮和易于维护的代码。