TypeScript 可选参数

注意: 如果您是 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) 时。

  • num15num210num3undefined
  • 因此,将执行 if 语句内的代码。
  • 因此,sum() 将返回 num1 + num2,即 15

2. 当调用 sum(5, 10, 15) 时。

  • num15num210num315
  • 因此,将不执行 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(参数 510 的和)。

这是因为 num3undefined,将其添加到数值中会得到 NaN


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战