TypeScript剩余参数类型

必选参数可选参数默认参数处理的都是单个参数,而剩余参数处理的则是多个参数。如果函数定义中声明了剩余参数,那么在调用函数时会将多余的实际参数收集到剩余参数列表中。因此,剩余参数的类型应该为数组类型或元组类型。虽然剩余参数也可以定义为顶端类型或尾端类型,但是实际意义不大,因此不展开介绍。

数组类型的剩余参数

最常见的做法是将剩余参数的类型声明为数组类型。例如,下例中的f函数定义了“number[]”类型的剩余参数:

function f(...args: number[]) {}

在调用定义了剩余参数的函数时,剩余参数可以接受零个或多个实际参数。示例如下:

function f(...args: number[]) {}

f();
f(0);
f(0, 1);

元组类型的剩余参数

剩余参数的类型也可以定义为元组类型。例如,下例中剩余参数args的类型为包含两个元素的元组类型:

function f(...args: [boolean, number]) {}

如果剩余参数的类型为元组类型,那么编译器会将剩余参数展开为独立的形式参数声明,主要包括以下几种情况:

  • 常规元组类型,示例如下:
function f0(...args: [boolean, number]) {}

// 等同于:

function f1(args_0: boolean, args_1: number) {}
  • 带有可选元素的元组类型,示例如下:
function f0(...args: [boolean, string?]) {}

// 等同于:

function f1(args_0: boolean, args_1?: string) {}
  • 带有剩余元素的元组类型,示例如下:
function f0(...args: [boolean, ...string[]]) {}

// 等同于:

function f1(args_0: boolean, ...args_1: string[]) {}

在了解了元组类型剩余参数的展开行为后,我们也就清楚了该如何传入对应的实际参数,如下所示:

function f0(...args: [boolean, number, string]) {}
f0(true, 0, '');

function f1(...args: [boolean, number, string?]) {}
f1(true, 0, '');
f1(true, 0);

function f2(...args: [boolean, number, ...string[]]) {}
f2(true, 0);
f2(true, 0, '');
f2(true, 0, '', 'coolcou');

function f3(...args: [boolean, number?, ...string[]]) {}
f3(true);
f3(true, 0);
f3(true, 0, '');
f3(true, 0, '', 'coolcou');

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!