TypeScript可选参数类型

在JavaScript中,函数的每一个参数都是可选参数,而在TypeScript中,默认情况下函数的每一个参数都是必选参数。在调用函数时,编译器会检查传入实际参数的个数与函数定义中形式参数的个数是否相等。如果两者不相等,则会产生编译错误。如果一个参数是可选参数,那么就需要在函数类型定义中明确指定。

在函数形式参数名后面添加一个问号“?”就可以将该参数声明为可选参数。例如,下例中我们将add函数的参数y定义为可选参数:

function add(x: number, y?: number) {
   return x + (y ?? 0);
}

我们也可以同时定义多个可选参数。示例如下:

function add(x: number, y?: number, z?: number) {
   return x + (y ?? 0) + (z ?? 0);
}

函数的可选参数必须位于函数参数列表的末尾位置。在可选参数之后不允许再出现必选参数,否则将产生编译错误。

例如,下例中add函数的第一个参数x是可选参数,在它之后的参数y是必选参数,因此将产生编译错误。示例如下:

function add(x?: number, y: number) {
    //           ~
    //           编译错误!必选参数不能出现在可选参数之后
}

如果函数的某个参数是可选参数,那么在调用该函数时既可以传入对应的实际参数,也可以完全不传入任何实际参数。

例如,下例中参数x是必选参数,y是可选参数。在调用add函数时,既可以传入一个实际参数,也可以传入两个实际参数。但是,若没有传入参数或者传入了多于两个的参数,则将产生编译错误。示例如下:

function add(x: number, y?: number) {
   return x + (y ?? 0);
}

add();        // 编译错误
add(1);       // 正确
add(1, 2);    // 正确
add(1, 2, 3); // 编译错误

“--strictNullChecks”模式下,TypeScript会自动为可选参数添加undefined类型。因此,上例中add函数的定义等同于如下定义:

/**
* --strictNullChecks=true
*/
function add(x: number, y?: number | undefined) {
   return x + (y ?? 0);
}

TypeScript允许给可选参数传入一个undefined值。示例如下:

/**
* --strictNullChecks=true
*/
function add(x: number, y?: number) {
   return x + (y ?? 0);
}

add(1);            // 1
add(1, 2);         // 3
add(1, undefined); // 1

需要注意的是,为参数添加undefined类型不等同于该参数是可选参数。若省略了“?”符号,则参数将成为必选参数,在调用时必须传入一个实际参数值。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!