新建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來定義