函数类型

在 TypeScript 中,函数不仅是代码结构的组成部分,还是类型系统的核心。通过函数类型,我们能够更清晰地定义函数的输入和输出,并让 TypeScript 编译器在编译时进行更强大的类型检查。

函数的两种声明方式

  • 通过function关键字来进行声明

    1
    2
    3
    4
    function add(a: number, b: number):number {
    return a + b;
    }
    add(1, 2)
  • 通过表达式方式声明

    1
    2
    3
    4
    5
    type Add = (x: number, b1: number) => number;
    let add: Add = (x, y) => {
    return x + y
    };
    add(1, 2)

可以用来限制函数的参数和返回值类型,上面的例子声明了一个名为 add 的函数,该函数接收两个参数 x 和 y,它们的类型分别为 number,并且函数返回值的类型也被指定为 number。

可选参数

在函数参数中,有时候我们希望某个参数是可选的(非必传)。可以使用 ? 表示可选参数。

1
2
3
4
let sum = (a: string, b?: string):string => {
return a + b;
};
sum('langpz');

可选参数必须在其他参数的最后面。

默认参数

在函数参数中,有时候我们希望希望给参数设置一个默认值。可以使用 = 表示默认参数。

1
2
3
4
let sum = (a: string, b: string = '.com'):string => {
return a + b;
};
sum('langpz');

默认参数不能同时和可选参数使用。

剩余参数

有时我们希望一个函数可以接受任意数量的参数。可以使用 表示剩余参数。

1
2
3
4
5
function sum(...numbers: number[]): number {
return numbers.reduce((acc, val) => acc + val, 0);
}

const result = sum(1, 2, 3, 4); // 10

函数重载

TypeScript 允许我们为同一个函数提供多个类型定义,称之为函数重载。你可以在不同的情况下为函数提供不同的输入和输出类型定义,让编译器能够更精确地推断和检查函数调用。

1
2
3
4
5
6
7
8
9
10
11
function toArray(value: number): number[]
function toArray(value: string): string[]
function toArray(value: number | string) {

if (typeof value === 'string') {
return value.split('');
} else {
return value.toString().split('').map(item => Number(item));
}
}
toArray(123); // [1, 2, 3]
toArray('123'); // ["1", "2", "3"]

根据传入不同类型的数据 返回不同的结果。