新建function.ts。而后在index.ts内引用es6
给函数定义参数类型:上面是es5的写法 下面是ts6的写法数组
一个完整的函数类型。括号 箭头 number浏览器
如今给add赋值一个函数app
若是参数传的是string那么就会报错了,类型不兼容函数
全局定义的arg3是不须要定义在函数里的学习
接口定义函数类型,讲接口的时候已经学习过了这里再来看一下es5
tslint推荐咱们使用类型别名,一保存文件就变成了这种形式prototype
也能够这么去定义,此时isString类型就等同于string类型3d
指定了AddFunce是add 这个类型,而后就能够给他赋值一个函数对象
首先是可选参数
这种形式是类型别名的形式
参数是可选的,只要在参数后面加一个问号就能够了。在js中可选参数是能够在任何地方的,只要用undefined占位就能够了
ts中可选参数必须在必选参数后面才能够
加上第三个参数的状况
在浏览器中用es5的写法写一个函数,默认参数的形式
第二参数传0或者undefined的结果都是2
参数等于一个值,这是在es6中的语法,es6中没有类型
在ts中的默认参数,ts中有类型,就能够这么写,给y设置的默认值是3
默认值能够省略y的类型,ts会根据咱们后面设置的3来判断这是个什么类型的参数
若是这里传字符串就会报错,ts已经推算出来y是number类型的
函数能够有任意多的参数
在es6以前的写法
arguments是一个类数组对象,handleData这里咱们不写参数,在方法里面用arguments.lenth来判断参数的数量
array.join(',')数组有这个join方法,可是arguments是一个类数组它没有,因此咱们须要用一个巧妙的方式来转换一下
Array.prototype.slice.apply(arguments)。 这样arguments就会转换成一个数组
多个参数返回拼接的结果如下划线拼接
es6出现以后,...三个点的操做符
...args能够去拆解一些数组和对象
...就是把数组拆开了放到arr2里面了。
还能够支持对象
obj2也拥有ob1里面全部的属性
制定...args来接收后面全部的参数,它是一个数组,因此执行参数类型就是number[]
这两个就是函数重载
第三个定义实际的函数
这里咱们调用传入字符串
传入字符串和数值,两种不一样的返回结果
这就是函数的重载。根据咱们传入的不一样的函数的类型和个数参数,返回不一样类型
传入字符串,返回的是字符串的数组,再循环这个数组,直接调用toFixed方法就会报错了。由于参数是字符串类型的,不是数字
传入的123是数值类型,这里调用length也是不对的,只有字符串或者子数组才有length这个属性
以上就是函数重载。
前两个是函数重载。
第三个是函数实体,它不是重载的一部分
函数重载只能使用function来定义