4. ts. 函數相關

函數

1. 函數聲明

  • 函數聲明 (Function Declaration)
function add(x:number, y:number):number{
    return x + y
}
  • 函數表達式 (Function Expression)
let add = function(x:number, y:number):number{
    return x + y
}
//  這種定義方式只定義了匿名函數的傳參要求,並沒有給 add 的參數添加定義,但是這種方式也可以通過編譯,由右側推導出左側參數定義


let add(x:number, y:number) => number = function(x:number, y:number):number{
    return x + y
}
//  =>  表示函數的定義,左邊爲輸入類型(需要用括號擴起來),右邊爲輸出類型

無論是那種函數定義方式,在傳參數時都不能少或者多,如果有可傳可不傳的參數,請看 可選參數

2. 接口定義函數

interface IoFuc{
    (x:string, y:string):number
}

let getLoc:IoFuc

getLoc = function(x: string, y: string): number {
    return x.indexOf(y)
}

3. 可選參數
? 表示可選參數

function buildName(firstName:string, lastName?:string):string{
    if(lastName) {
        return firstName + lastName
    } else {
        return firstName
    }
}

可選參數必須在必選參數後面

4. 參數默認值

ts 會將有默認值的參數識別爲可選參數,此時它可以在必選參數前面,此時傳值是需要的,若在必選參數後面可以不用傳值,具體如下:

function buildName(firstName:string, lastName:string = 'tom'):string{
    return firstName + lastName
}
buildName('Li')


function buildName(lastName:string = 'tom', firstName:string):string{
    return firstName + lastName
}
buildName(undefined, 'Wang')

5. 剩餘參數

  • es6中 ...rest 獲取函數的剩餘參數,如下:
function indexs(a, ...rest) {
    console.log(rest)
}
indexs(1, 2, 4, 5)
// 2 4 5

...rest chrom 測試

  • 上面例子中可知,rest是一個數組,我們可以用數組類型來定義它。 rest參數一定是截止到最後一個參數!
function push(array:any[], ...rest:any[]):any[] {
    rest.forEach(item => {
        array.push(item)
    })
}
let arr:any[] = []
push(arr, 1, 2, 3, 'd', 'e', 5)
// arr [1, 2, 3, 'd', 'e', 5]

rest arr 計算

6. 重載

重載允許一個函數接受不同數量或類型的參數是做出不同的處理。

// 實現將一個字符串或數字進行反轉的方法

// 爲了更精準的表達,輸入的是字符串,輸出也應該是字符串,數字同理,所以可以重載定義多個reverseFnc的函數類型
function reverseFnc(x:number):number;
function reverseFnc(x:string):string;

function reverseFnc(x:number|string):number|string{
    if(typeof x === 'string') {
        return x.split('').reverse().join('')
    } else if(typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''))
    }
}

在上述例子中,多次重複定義了reverseFnc函數,前幾次屬於函數的定義,最後一次屬於函數的實現。
typescript會優先從最前面的函數定義開始匹配,多個函數如果有包含關係,則應該將更精準的定義寫在前面!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章