美文网首页
TypeScript-可选默认参数、剩余参数

TypeScript-可选默认参数、剩余参数

作者: 风之伤_3eed | 来源:发表于2018-12-19 10:19 被阅读0次

可选默认参数

TypeScript里的每个函数参数都是必须的。 这不是指不能传递 nullundefined作为参数,而是说编译器检查用户是否为每个参数都传入了值。 编译器还会假设只有这些参数会被传递进函数。 简短地说,传递给一个函数的参数个数必须与函数期望的参数个数一致。

function buildName(firstName: string, lastName: string) {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob");                  // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result3 = buildName("Bob", "Adams");         // ah, just right

JavaScript里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是undefined。 在TypeScript里我们可以在参数名旁使用 ?实现可选参数的功能。 比如,我们想让last name是可选的:

function buildName(firstName: string, lastName?: string) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}

let result1 = buildName("Bob");  // works correctly now
let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result3 = buildName("Bob", "Adams");  // ah, just right

可选参数必须跟在必须参数后面。 如果上例我们想让first name是可选的,那么就必须调整它们的位置,把first name放在后面。

在TypeScript里,我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是undefined时。 它们叫做有默认初始化值的参数。 让我们修改上例,把last name的默认值设置为"Smith"。

function buildName(firstName: string, lastName = "Smith") {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob");                  // works correctly now, returns "Bob Smith"
let result2 = buildName("Bob", undefined);       // still works, also returns "Bob Smith"
let result3 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result4 = buildName("Bob", "Adams");         // ah, just right

与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面。 如果带默认值的参数出现在必须参数前面,用户必须明确的传入 undefined值来获得默认值。 例如,我们重写最后一个例子,让 firstName是带默认值的参数:

function buildName(firstName = "Will", lastName: string) {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob");                  // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result3 = buildName("Bob", "Adams");         // okay and returns "Bob Adams"
let result4 = buildName(undefined, "Adams");     // okay and returns "Will Adams"

剩余参数

必要参数,默认参数和可选参数有个共同点:它们表示某一个参数。 有时,你想同时操作多个参数,或者你并不知道会有多少参数传递进来。 在JavaScript里,你可以使用 arguments来访问所有传入的参数。

function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 编译器创建参数数组,名字是你在省略号( ...)后面给定的名字,你可以在函数体内使用这个数组。

这个省略号也会在带有剩余参数的函数类型定义上使用到:

function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + " " + restOfName.join(" ");
}

let buildNameFun: (fname: string, ...rest: string[]) => string = buildName;

相关文章

  • TypeScript-可选默认参数、剩余参数

    可选默认参数 TypeScript里的每个函数参数都是必须的。 这不是指不能传递 null或undefined作为...

  • TypeScript函数

    可选参数(y?) 默认参数 剩余参数 函数重载

  • TypeScript 函数初探

    # 1. 函数声明 # 2. 函数传参 # 3. 可选参数 # 4. 默认可选参数 # 5. 剩余参数

  • 03. typescript函数定义

    函数定义 2.定义方法传参 方法可选参数 (可选参数必须配置在参数最后面) 默认参数 剩余类型 函数重载 同样的方...

  • 3、TS 函数

    1、函数的返回值 2、函数的形参 3、可选参数 4、默认值如果设置了默认,那他就是可选参数,不需要再加问号 5、剩余参数

  • 学习typescript - Functions

    定义函数出参入参类型 定义函数出参入参类型完整写法 可选参数和默认参数 剩余参数 this 参数 重载 自行回顾 ...

  • TypeScript05(函数扩展)

    函数的类型 函数的可选参数? 函数参数的默认值 接口定义函数 定义剩余参数 函数重载重载是方法名字相同,而参数不同...

  • 函数与泛型

    函数声明 为函数定义类型 可选参数、默认参数、类型推断、剩余参数 泛型 我们需要一种方法使返回值的类型与传入参数的...

  • 02|typescript常用实例

    一、定义索引数组 二、定义函数 函数参数可选 函数参数默认值 函数参数的剩余变量 函数的重载 三、ts中的类 类的...

  • 2.函数的定义及函数的参数

    函数的定义 函数的参数 (必传) 函数的可选参数 可选参数 使用 '?'可选参数必须配置到参数的后面 函数的默认参...

网友评论

      本文标题:TypeScript-可选默认参数、剩余参数

      本文链接:https://www.haomeiwen.com/subject/fmpdkqtx.html