TypeScript 默认参数

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


TypeScript 允许您为函数设置默认参数值。当调用函数时没有传递相应的参数,就会使用这些默认值。

示例

function greet(name: string = "Guest"): void {
    console.log(`Hello, ${name}!`);
}

greet(); 

// Output: Hello, Guest!

在此示例中,greet() 函数具有一个默认参数 name,其字符串值为 "Guest"。由于我们没有向函数传递任何参数,因此它使用了默认值。


示例 1:TypeScript 默认参数

function sum(x: number = 3, y: number = 5): number { // Return sum return x + y; }
// Pass arguments to x and y let result: number = sum(5, 15); console.log(`Sum of 5 and 15: ${result}`); // Pass argument to x but not to y result = sum(7); console.log(`Sum of 7 and default value (5): ${result}`); // Pass no arguments // Use default values for x and y result = sum(); console.log(`Sum of default values (3 and 5): ${result}`);

输出

Sum of 5 and 15: 20
Sum of 7 and default value (5): 12
Sum of default values (3 and 5): 8

在上面的示例中,x 的默认值为 3y 的默认值为 5

  • sum(5, 15) - 当两个参数都传递时,x5y15
  • sum(7) - 当传递 7 时,x7y 取默认值 5
  • sum() - 当不传递任何参数时,xy 分别取默认值 35
How default arguments work in TypeScript
TypeScript 中默认参数的工作原理

默认参数应放在必需参数之后

如果您的函数同时包含默认参数和必需参数(即没有默认值的参数),则应将默认参数放在必需参数的**后面**。例如,

function sum(x: number, y: number, z: number = 10): number {
    return x + y + z;
}

// Don't pass argument to z
// So z = 10 by default
let result: number = sum(5, 15);
console.log(`5 + 15 + 10 = ${result}`);

// Pass argument to z
result = sum(5, 15, 13);
console.log(`5 + 15 + 13 = ${result}`);

输出

5 + 15 + 10 = 30
5 + 15 + 13 = 33

在上面的示例中,我们将默认参数 z: number = 10 放在了参数列表的最后。

因此,当 TypeScript 遇到代码 sum(5, 15) 时,它清楚地知道 x = 5 并且 y = 15

将默认参数放在前面

现在,让我们通过将默认参数放在前面来编写一个类似的程序

function sum(x: number = 10, y: number, z: number): number {
    return x + y + z;
}

// Only pass two arguments
// Invalid code
let result: number = sum(5, 15);
console.log(result);

输出

error: Expected 3 arguments, but got 2.
An argument for 'z' was not provided.

正如您所见,当我们向 sum() 函数只传递两个参数时,我们遇到了一个错误。

这是因为 TypeScript 将 5 分配给 x,将 15 分配给 y。因此,没有参数传递给 z 参数,这会导致错误。

注意: 如果您将默认参数放在必需参数之间,您也会遇到类似的问题。


关于默认参数的更多内容

将一个参数作为另一个参数的默认值

在 TypeScript 中,您可以将一个参数作为另一个参数的默认值。例如,

function sum(x: number = 1, y: number = x,  z: number = x + y): void {
    console.log(x + y + z);
}

sum(); 

// Output: 4

在上面的例子中:

  • x 的默认值为 1
  • y 的默认值设置为 x 参数。
  • z 的默认值是 xy 的总和。

因此,当 sum() 在没有任何参数的情况下调用时,它会使用这些默认值,导致计算 1 + 1 + 2 = 4。因此,输出为 4

将函数值作为默认值

我们也可以在 TypeScript 中将函数作为默认值。例如,

function sum(): number { 
    return 15;
}

// Use sum() in default value of y
function calculate( x, y = x * sum() ): number {
    return x + y;
}

let result: number = calculate(10);
console.log(result);

// Output: 160

这里,

  • sum() 函数返回 15
  • 10 被传递给 calculate() 函数。
  • x 变为 10y 变为 150x * sum())。
  • 结果将是 160x + y)。
传递 undefined 值

在 TypeScript 中,当您将 undefined 传递给默认参数时,函数会采用默认值。例如,

function test(x: number = 1): void {
    console.log(x);
}

// Pass undefined
// Takes default value 1
test(undefined);

// Output: 1

这同样适用于参数列表开头或中间有默认参数的函数。例如,

// Function that has default parameter at the beginning
function sum(x: number = 10, y: number, z: number): number {
    return x + y + z;
}

// Function that has default parameter at the middle
function difference(x: number, y: number = 10, z: number): number {
    return x - y - z;
}

// Call sum() function
// Pass undefined to default parameter
let result: number = sum(undefined, 5, 15);
console.log(`10 + 5 + 15 = ${result}`);

// Call difference() function
// Pass undefined to default parameter
result = difference(5, undefined, 15);
console.log(`5 - 10 - 15 = ${result}`);

// Output:
// 10 + 5 + 15 = 30
// 5 - 10 - 15 = -20

另请阅读

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

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

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

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