05. Typescript 为函数定义类型

123 阅读2分钟

1. 为函数定义类型

// 为函数定义类型
let myAdd = (x: number, y: number):number => {
  return x + y;
};

写法: (参数1:参数1类型, 参数2:参数2类型, ...):返回值类型 => {}

1.1. 可选参数

通过 表示该参数为可选参数

// 可选参数和默认参数
let myAdd2 = (x: number, y?: number):number => { // 可选参数必须在必选参数后面
  return x + (y || 0); // y 是可选参数,如果没有传入,则默认为 0
};
// 参数默认值
let myAdd3 = (x: number, y = 0):number => { 
  return x + y; // y 是默认参数,如果没有传入,则默认为 0
};

需要注意:可选参数和默认参数要放在必选参数后面。

1.2. 接口定义函数

可以使用接口定义函数,写法与普通定义相同。与普通定义相比,此方式可以用于其他函数进行校验。

// 接口定义函数类型
interface MyAdd {
  (x: number, y: number): number; // 函数类型
}
let myAdd4: MyAdd = (x: number, y: number):number => { // 函数类型
  return x + y;
};

1.3. 定义剩余参数

剩余参数语法允许函数接受不定数量的参数,并将这些参数表示为一个数组。

写法: ...args: number[] 表示剩余参数,类型为 number[]

// 定义剩余参数
let myAdd5 = (...args: number[]):number => { // 剩余参数必须在必选参数后面
  return args.reduce((acc, cur) => acc + cur, 0); // 计算所有参数的和
};

剩余参数与 arguments 对象的区别

  • 数组实例:剩余参数数组时一个真正的数组实例,可以直接使用数组的方法。arguments 对象是一个类数组,不可以使用数组方法。
  • 包含参数:剩余参数只包含哪些没有对应形参的实参。arguments 对象包含了传给函数的所有实参。
  • 附加属性:arguments 对象有一些额外的附加属性,例如 callee 属性。

2. 函数重载

2.1. 定义

函数重载是指在同一个函数名下,有多个函数类型的定义,这些函数类型的定义可以是不同的参数类型和返回值类型。函数重载的目的是为了让函数的调用更加灵活

可以根据传入的参数类型和返回值类型,自动选择对应的函数类型。函数重载的实现是通过函数重载列表和函数实现来实现的。函数重载列表是一组函数类型的定义

2.2. 实现

函数实现是一组函数的实现代码。函数重载列表和函数实现的定义顺序是无关的, 但是函数实现的定义顺序必须在函数重载列表的后面。

// 函数重载 
function add(x: number, y: number): number; // 函数重载
function add(x: string, y: string): string; // 函数重载
function add(x: any, y: any): any { // 函数实现
  return x + y;
}
add(1, 2); // 3
add("1", "2"); // "12"

3. 代码下载

📎函数类型.ts