本篇博客主要总结一下在Typescript
中的函数写法,以及函数类型的总结。
一、Typescript的函数类型 如果在一个函数中,需要传入一个函数作为参数,可以如下所示,进行声明定义。
文章图片
我们也可以通过type来定义函数类型
文章图片
如上述代码所示,( num1:number, num2: number ) => void
就表示函数类型,并且此时需要传入两个参数,并且两个都是number
类型,返回值也为number
类型。在一些语言中num1
和num2
是可以不传的,但是在typescript
中是不行的。
文章图片
如果不传,则代码为(number, number) => void
,表示为两个参数都是number(此时会报错,因为形参重复)
,并且两个参数的类型均为any
类型。
二、参数的可选类型
文章图片
如上图所示,此时我们在第二个参数y
使用?
表示其为可选类型,此时表示y
的参数的值可以为number
类型,也可以是undefined
类型。此时我们需要注意的是:可选类型参数需要在必须类型的后面。
文章图片
此时如果在可选参数的后面,就会报错。
三、函数参数的默认值
文章图片
如上图所示,此时我们可以给函数参数设置一个默认值,也就是直接在后面加上=
赋值即可,当函数没有传入值,或者传入的是undefined
值时,就会使用默认值类型。当我们传入null
时,就会发生报错。
四、剩余参数 和js
中一样,ts
中也存在剩余参数,我们可以使用...
来收集参数。下面是一个求和的例子。
文章图片
五、typescript中的this 在ts中的this指向也是和在js中是一致的,关于在js
中的this指向问题
可以查看js中的this详解。
文章图片
不确定的this指向
文章图片
如上图所示,此时代码会报错,虽然说我们将该函数通过info
对象来调用,但是,该函数处于外部环境,很有可能被其他对象所调用,如果其他对象不存在name
属性,此时就会报错。所以ts
为了安全,直接在info执行的时候报错
。所以一般我们在一个函数中使用到this的话,应该在函数中指定this的类型
文章图片
如上述代码所示,我们通过给sayHello
指定this
的类型为{name:string}
,就可以调用了。
文章图片
如图所示,如果不存在name
属性,则直接就会报错。
ts也支持显示绑定
文章图片
ts支持隐式绑定
文章图片
六、函数的重载 【typescript|Typescript总结(三)——函数类型详解】我们首先先看一个例子
文章图片
如上图所示我们指定paramsType
类型为number类型或者string类型
,但是当我们返回值时,显示操作符不能作用域paramsType
类型的数据。
文章图片
可以使用如上代码解决:但是存在两个问题:
1、需要写的一些逻辑判断
2、函数返回值无法确定类型
此时我们可以使用函数的重载
。
一般我们需要编写两个或者两个以上的重载签名,然后再编写重载函数来实现。
文章图片
在重载中实现函数是不能被调用的
文章图片
联合类型和重载函数小案例
我们想要实现传入一个数组或者一个字符串,此时可以返回数组或者字符串的长度。
联合类型实现:
文章图片
重载实现
文章图片
两者比较的话,我们发现使用联合类型
较为简单一些,如果能够使用联合类型
来解决的话,可以使用联合类型解决
,如果不能,比如说返回值类型不同,我们可以使用重载来解决
。
推荐阅读
- vue|vue基础语法
- 前端|vue 基础语法 总结及例子说明
- Vue.js|VUE全家桶系列之基本知识点
- Vuejs|Vue全家桶之组件基础(二)
- Vuejs|Vue全家桶之Vue核心(一)
- Vuejs|Vue全家桶之Vue CLI入门(三)
- JavaScript|JS内置引用类型/内置对象
- 用egg.js+mongodb简单实现CURDAPI
- 笔记|ES6 新特性介绍