从 0 开始的 TypeScriptの七:函数
函数
介绍
函数是JavaScript
应用程序的基础。 它帮助你实现抽象层,模拟类,信息隐藏和模块,同时也是JavaScript
中的一等公民。
在TypeScript
里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。
TypeScript
为JavaScript
函数添加了 <font color=#2DE02D >额外的功能</font>,让我们可以更容易地使用。
在TypeScript
里,函数也分为命名函数和匿名函数。
不过只要有一些JavaScript
的基础的话,对于TypeScript
中的函数知识应该都不会觉得难学
函数定义
JavaScript 函数定义
在JavaScript
中,函数定义分为函数声明和函数表达式两种:
函数声明(Function Declaration)
函数表达式(Function Expression)
TypeScript 函数定义
在 typescript
中也可以使用这两种方式定义函数,不过需要进行约束,在之前的博客中曾经说过类型定义,使用类型定义是最简单的函数约束。
如果定义的函数无返回值,可以使用void
空值。 这个在之前的函数类型https://juejin.cn/post/6992001689867780126中也有提到过。
下面的例子,如果现在写了返回值 return a;,就会发生报错 Type 'number' is not assignable to type 'void'.
注意: 与 JavaScript 不同,使用约束后,
addNum
不能输入多余的(或者少于要求的)参数。 如果使用?
对参数进行可选声明,在调用传参时可不输入
TypeScript 完整函数
函数类型包含两部分:参数类型和返回值类型。 当写出完整函数类型的时候,这两部分都是需要的。函数中使用的捕获变量不会体现在类型里。 实际上,这些变量是函数的隐藏状态并不是组成 API 的一部分。
在TypeScript
中,也是存在=>
的。 不过这与 es6 中的箭头函数=>
是两种不同的定义。
在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。
例子:
当然,如果不给函数定义返回类型,其实也可以成功。这是因为 ts 中存在推断类型,按上下文归类”,是类型推论的一种。 它帮助我们更好地为程序指定类型。
可选参数
函数的可选参数就是在方法定义时,参数后添加?
,可选参数要放在最后面,必选参数、默认参数放在其前面
例子:
默认参数
在JavaScript
中没有办法设置默认参数,但是typescript
中可以设置
使用默认参数时,可选参数要放在最后面。
剩余参数
有时,你想同时操作多个参数,或者你并不知道会有多少参数传递进来。 在 JavaScript 里,你可以使用 arguments 来访问所有传入的参数。
在typescript
中,可以把所有参数收集到一个变量。 在 es6 中有一个名为...
的扩展操作符,此运算符主要用于函数操作时调用
这里定义...
扩展操作符时,类型可以设置成数组
下面是一个累加方法的例子:
函数重载
typescript
中重载: 通过为同一个函数提供多个函数类型定义来实现多种功能的目的
例子:
在JavaScript
里, 如果遇到相同的方法名,会将以下面的方法来覆盖上面的方法,不会出错。 但是在typescript
中,这种定义方式是会出错的。错误原因是函数重复实现
TS 重载实现:
其实我个人觉得,typescript
的重载写起来不舒服,所以尽量减少重复命名的方法吧
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/1867f6a3a257ee4adc1c1b269】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论