typescript|Typescript总结(三)——函数类型详解

本篇博客主要总结一下在Typescript中的函数写法,以及函数类型的总结。
一、Typescript的函数类型 如果在一个函数中,需要传入一个函数作为参数,可以如下所示,进行声明定义。
typescript|Typescript总结(三)——函数类型详解
文章图片

我们也可以通过type来定义函数类型
typescript|Typescript总结(三)——函数类型详解
文章图片

如上述代码所示,( num1:number, num2: number ) => void就表示函数类型,并且此时需要传入两个参数,并且两个都是number类型,返回值也为number类型。在一些语言中num1num2是可以不传的,但是在typescript中是不行的。
typescript|Typescript总结(三)——函数类型详解
文章图片

如果不传,则代码为(number, number) => void,表示为两个参数都是number(此时会报错,因为形参重复),并且两个参数的类型均为any类型。
二、参数的可选类型 typescript|Typescript总结(三)——函数类型详解
文章图片

如上图所示,此时我们在第二个参数y使用?表示其为可选类型,此时表示y的参数的值可以为number类型,也可以是undefined类型。此时我们需要注意的是:可选类型参数需要在必须类型的后面。
typescript|Typescript总结(三)——函数类型详解
文章图片

此时如果在可选参数的后面,就会报错。
三、函数参数的默认值 typescript|Typescript总结(三)——函数类型详解
文章图片

如上图所示,此时我们可以给函数参数设置一个默认值,也就是直接在后面加上=赋值即可,当函数没有传入值,或者传入的是undefined值时,就会使用默认值类型。当我们传入null时,就会发生报错。
四、剩余参数 和js中一样,ts中也存在剩余参数,我们可以使用...来收集参数。下面是一个求和的例子。
typescript|Typescript总结(三)——函数类型详解
文章图片

五、typescript中的this 在ts中的this指向也是和在js中是一致的,关于在js中的this指向问题可以查看js中的this详解。
typescript|Typescript总结(三)——函数类型详解
文章图片

不确定的this指向
typescript|Typescript总结(三)——函数类型详解
文章图片

如上图所示,此时代码会报错,虽然说我们将该函数通过info对象来调用,但是,该函数处于外部环境,很有可能被其他对象所调用,如果其他对象不存在name属性,此时就会报错。所以ts为了安全,直接在info执行的时候报错所以一般我们在一个函数中使用到this的话,应该在函数中指定this的类型
typescript|Typescript总结(三)——函数类型详解
文章图片

如上述代码所示,我们通过给sayHello指定this的类型为{name:string},就可以调用了。
typescript|Typescript总结(三)——函数类型详解
文章图片

如图所示,如果不存在name属性,则直接就会报错。
ts也支持显示绑定
typescript|Typescript总结(三)——函数类型详解
文章图片

ts支持隐式绑定
typescript|Typescript总结(三)——函数类型详解
文章图片

六、函数的重载 【typescript|Typescript总结(三)——函数类型详解】我们首先先看一个例子
typescript|Typescript总结(三)——函数类型详解
文章图片

如上图所示我们指定paramsType类型为number类型或者string类型,但是当我们返回值时,显示操作符不能作用域paramsType类型的数据。
typescript|Typescript总结(三)——函数类型详解
文章图片

可以使用如上代码解决:但是存在两个问题:
1、需要写的一些逻辑判断
2、函数返回值无法确定类型
此时我们可以使用函数的重载
一般我们需要编写两个或者两个以上的重载签名,然后再编写重载函数来实现。
typescript|Typescript总结(三)——函数类型详解
文章图片

在重载中实现函数是不能被调用的
typescript|Typescript总结(三)——函数类型详解
文章图片

联合类型和重载函数小案例
我们想要实现传入一个数组或者一个字符串,此时可以返回数组或者字符串的长度。
联合类型实现:
typescript|Typescript总结(三)——函数类型详解
文章图片

重载实现
typescript|Typescript总结(三)——函数类型详解
文章图片

两者比较的话,我们发现使用联合类型较为简单一些,如果能够使用联合类型来解决的话,可以使用联合类型解决,如果不能,比如说返回值类型不同,我们可以使用重载来解决

    推荐阅读