《TypeScript实战指南》—2.3.2 参数

举报
华章计算机 发表于 2019/06/16 12:58:54 2019/06/16
【摘要】 本节书摘来自华章计算机《TypeScript实战指南》一书中的第2章,第2.3.2节,作者是胡桓铭。

2.3.2 参数

1.可选参数

TypeScript里的每个函数参数都必须有值。当然,如果允许的话,我们也可以传递 undefined 或者 null值,这里强调参数必须一一对应,占住坑,如下所示:

function buildName(firstName: string, lastName: string) {

    return firstName + " " + lastName;

}

 

let name1 = buildName("Barack");

// [ts] Expected 2 arguments, but got 1.

let name2 = buildName("Barack", "Obama", "Sr.");

// [ts] Expected 2 arguments, but got 3.

let name3 = buildName("Barack", "Obama");

参数多一个或者少一个都是不能通过编译时检查的,如果我们希望后续的参数是可选的,可以使用之前出现过的问号,如下所示:

function buildName(firstName: string, lastName?: string) {

    if (lastName) {

        return firstName + " " + lastName;

    }

    else {

        return firstName;

    }

}

 

let name1 = buildName("Barack");

let name2 = buildName("Barack", "Obama", "Sr.");

// [ts] Expected 2 arguments, but got 3.

let name3 = buildName("Barack", "Obama");

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

2.默认参数

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

function buildName(firstName: string, lastName = "Obama") {

    return firstName + " " + lastName;

}

 

let name1 = buildName("Barack");

// "Barack Obama"

 

let name2 = buildName("Barack", "Obama", "Sr.");

// [ts] Expected 2 arguments, but got 3.

 

let name3 = buildName("Barack", "Trump");

// "Barack Trump"

lastName 作为默认参数与可选参数一样,是可以省略的。不同的是,省略后会有一个默认值提供给函数使用:

function buildName(firstName: string, lastName?: string) {

    // ...

}

function buildName(firstName: string, lastName = "Smith") {

    // ...

}

还有一点不同,带默认值的参数不需要放在参数的最后面,它可以在任何位置。例如:

function buildName(firstName = "Barack", lastName: string) {

    return firstName + " " + lastName;

}

 

let name1 = buildName("Barack");

// [ts] Expected 2 arguments, but got 1.

 

let name2 = buildName(undefined, "Obama");

// "Barack Obama"

 

let name3 = buildName("Donald", "Trump");

// "Donald Trump"

如果不是放在最后面,就必须使用 undefined 或 null 对该参数的位置进行占位处理。

3.剩余参数

有时,你想同时操作多个参数,或者你并不知道会有多少个参数传递进来。在JavaScript里,你可以使用arguments来访问所有传入的参数。而在TypeScript里,你可以把所有参数收集到一个变量中,加省略号即可:

function buildName(firstName: string, ...names: string[]) {

    return firstName + " " + names.join(" ");

}

 

buildName("Barack", "Hussein", "Obama", "II");

可将剩余参数看成个数不限的可选参数:可以一个都没有,也可以有很多个。编译器创建一个参数数组用来存储这些剩余参数。

省略号也可以在函数类型定义上使用:

let buildNameFun: (firstName: string, ...names: string[]) => string;


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。