必选参数、可选参数和默认参数处理的都是单个参数,而剩余参数处理的则是多个参数。如果函数定义中声明了剩余参数,那么在调用函数时会将多余的实际参数收集到剩余参数列表中。因此,剩余参数的类型应该为数组类型或元组类型。虽然剩余参数也可以定义为顶端类型或尾端类型,但是实际意义不大,因此不展开介绍。
数组类型的剩余参数
最常见的做法是将剩余参数的类型声明为数组类型。例如,下例中的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');
酷客网相关文章:
评论前必须登录!
注册