跳到主要内容

TypeScript 默认参数

摘要:在本教程中,你将了解 TypeScript 默认参数。

TypeScript默认参数介绍

自 ES2015(或 ES6)以来,JavaScript 支持默认参数,语法如下:

function name(parameter1=defaultValue1,...) {
// do something
}

在此语法中,如果在调用函数时不传递参数或传递 undefined,则该函数将为省略的参数采用默认的初始化值。 例如:

function applyDiscount(price, discount = 0.05) {
return price * (1 - discount);
}

console.log(applyDiscount(100)); // 95

在此示例中,applyDiscount() 函数将参数 discount 作为默认参数。

当你不将参数 discount 传递给 applyDiscount() 函数时,该函数将使用默认值 0.05

与 JavaScript 类似,你可以使用相同语法在 TypeScript 中使用默认参数:

function name(parameter1:type=defaultvalue1, parameter2:type=defaultvalue2,...) {
//
}

以下示例使用 applyDiscount() 函数的默认参数:

function applyDiscount(price: number, discount: number = 0.05): number {
return price * (1 - discount);
}

console.log(applyDiscount(100)); // 95

请注意,你不能在函数类型定义中包含默认参数。 以下代码将导致错误:

let promotion: (price: number, discount: number = 0.05) => number;

报错:

error TS2371: A parameter initializer is only allowed in a function or constructor implementation.

默认参数和可选参数

与可选参数一样,默认参数也是可选的。 这意味着调用函数时可以省略默认参数。

此外,默认参数和结尾的默认参数共享相同的类型。 例如,以下函数:

function applyDiscount(price: number, discount: number = 0.05): number {
// ...
}

function applyDiscount(price: number, discount?: number): number {
// ...
}

共享相同的类型:

(price: number, discount?: number) => number

可选参数必须位于必需参数之后。 但是,默认参数不需要出现在必需参数之后。

当默认参数出现在必填参数之前时,需要显式传递 undefined 来获取默认的初始化值。

以下函数返回指定月份和年份的天数:

function getDay(year: number = new Date().getFullYear(), month: number): number {
let day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
// leap year
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
day = 29;
else
day = 28;
break;
default:
throw Error('Invalid month');
}
return day;
}

在此示例中,如果你不传递参数或传递 undefined,则年份的默认值为当前年份。

以下示例使用 getDay() 函数获取 2019 年 2 月的天数:

let day = getDay(2019, 2);
console.log(day); // 28

要获取今年 2 月的天数,你需要将 undefined 传递给年份参数,如下所示:

let day = getDay(undefined, 2);
console.log(day);

概括

  • 如果要设置参数的默认初始化值,请使用默认参数语法 parameter:=defaultValue
  • 默认参数是可选的。
  • 要使用参数的默认初始化值,请在调用函数时省略参数或将 undefined 递给函数。