注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
在 TypeScript 中,可选参数是函数参数,可以在程序稍后传递其参数,也可以不传递。
它们通过参数名后的 ?
符号来指示。
示例
// Function with optional parameter num3
function sum(num1: number, num2: number, num3?: number) {
if (typeof num3 === "undefined")
return num1 + num2;
return num1 + num2 + num3;
}
// Don't pass optional argument
let result: number = sum(5, 10);
console.log(result);
// Output: 15
在此示例中,sum()
函数有一个可选参数 num3
(即第三个参数)。由于此参数是可选的,因此只向函数传递两个参数也是完全有效的。
示例:TypeScript 可选参数
让我们重写前面的示例,也为可选参数传递一个参数。
// Function with optional parameter num3
function sum(num1: number, num2: number, num3?: number) {
// If num3 is not passed, its data type will be undefined
// In that case, return num1 + num2
if (typeof num3 === "undefined")
return num1 + num2;
// Else, return sum of all three parameters
return num1 + num2 + num3;
}
// Don't pass optional argument
let result: number = sum(5, 10);
console.log(`Sum without optional argument: ${result}`);
// Pass optional argument
result = sum(5, 10, 15);
console.log(`Sum with optional argument: ${result}`);
输出
Sum without optional argument: 15 Sum with optional argument: 30
程序工作方式如下:
1. 当调用 sum(5, 10) 时。
num1
为 5,num2
为 10,num3
为undefined
。- 因此,将执行
if
语句内的代码。 - 因此,
sum()
将返回num1 + num2
,即 15。
2. 当调用 sum(5, 10, 15) 时。
num1
为 5,num2
为 10,num3
为 15。- 因此,将不执行
if
语句内的代码。 - 因此,
sum()
将返回num1 + num2 + num3
,即 30。
可选参数应放在必需参数之后
如果您的函数同时包含可选参数和必需参数,则应将可选参数放在必需参数的后面。否则,TypeScript 会报错。例如,
// Valid because optional parameter num3 comes
// after the required parameters num1 and num2
function sum(num1: number, num2: number, num3?: number) {
if (typeof num3 === "undefined")
return num1 + num2;
return num1 + num2 + num3;
}
// Invalid because the optional parameter num1 comes first
function difference(num1?: number, num2: number, num3: number) {
if (typeof num3 === "undefined")
return num2 - num3;
return num1 - num2 - num3;
}
注意:如果您将可选参数放在必需参数之间,也会收到错误。
可选参数的类型检查
如果未向可选参数传递参数,则其值为 undefined
。
因此,如果您在函数中使用可选参数,则必须检查其值是否为 undefined
。
不执行此简单检查可能会导致程序出现意外行为。
// Bad Practice: num3 is possibly undefined
function sum(num1: number, num2: number, num3?: number) {
return num1 + num2 + num3;
}
let result: number = sum(5, 10);
console.log(result);
输出
NaN
在这里,我们得到了 NaN
(非数字)输出,而不是 15(参数 5 和 10 的和)。
这是因为 num3
是 undefined
,将其添加到数值中会得到 NaN
。
另请阅读