TypeScript 默认参数

摘要:在本教程中,您将学习 TypeScript 默认参数。

TypeScript 默认参数简介

JavaScript 从 ES2015(或 ES6)开始支持默认参数,其语法如下所示

function name(parameter1=defaultValue1,...) {
   // do something
}Code language: JavaScript (javascript)

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

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

console.log(applyDiscount(100)); // 95Code language: JavaScript (javascript)

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

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

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

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

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

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

console.log(applyDiscount(100)); // 95Code language: JavaScript (javascript)

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

let promotion: (price: number, discount: number = 0.05) => number;Code language: JavaScript (javascript)

错误

error TS2371: A parameter initializer is only allowed in a function or constructor implementation.Code language: JavaScript (javascript)

默认参数和可选参数

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

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

function applyDiscount(price: number, discount: number = 0.05): number {
  // ...
}Code language: JavaScript (javascript)

function applyDiscount(price: number, discount?: number): number {
  // ...
}Code language: JavaScript (javascript)

共享相同的类型

(price: number, discount?: number) => numberCode language: PHP (php)

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

当默认参数出现在必填参数之前时,您需要显式传递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;
}Code language: JavaScript (javascript)

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

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

let day = getDay(2019, 2);
console.log(day); // 28Code language: JavaScript (javascript)

要获取当前年份 2 月的天数,您需要像这样将 undefined 传递给 year 参数

let day = getDay(undefined, 2);
console.log(day);Code language: JavaScript (javascript)

总结

  • 如果您想为参数设置默认初始化值,请使用默认参数语法parameter:=defaultValue
  • 默认参数是可选的。
  • 要使用参数的默认初始化值,请在调用函数时省略参数或将undefined传递给函数。
本教程是否有帮助?