TypeScript函數宣告

前篇中提及TypeScript在變數型別宣告中,可以指定變數類型,讓程式設計過程中使用強型別的特性,減少開發過程中的錯誤。

想當然,除了在變數上,在函數、方法也是可以定義參數的型別的。

一、強型別函數

我們可以為函數的回傳類型、參數類型定義。而如果為無回傳值的函數則可以回傳void。以下範例則定義方法回傳型別為boolean、x參數為number。

function isOdd(x: number): boolean{
    return x %2 == 1;
}

 除了單一的類型指定,也可以使用聯合類型的定義方式。而函數、方法要定義多載,因JavaScript動態語言的特性,所以需使用聯合定義且在函數主體中對個別類型個別計算。

function isOdd(x: number | string): boolean{
    if (typeof (x) == "number") {
        return x % 2 == 1;
    } else {
        return isOdd(parseInt(x));
    }
}

二、選擇性參數

TypeScript就如同C#一樣,要傳遞給函數的參數必須要與函數本身一致。但JavaScript中的函數,每個參數都是選擇性的,未定義的參數為undefined。

在TypeScript中要使用選擇性參數則必須要在該參數名稱的後面加上「?」,表示此參數是可有可無的,但可選的參數必須是在所有必要參數的後面,如同C#一樣。

function sayHello(firstName:string, lastName:string, midName?:string): string{
    if (midName == null) {
        return [firstName, lastName].join(" ") + " Hello";
    } else {
        return [firstName, midName, lastName].join(" ") + " Hello";
    }
}

三、參數預設值

有部分的參數是必要的情況下,可以針對參數給定一預設值,呼叫時未定義參數內容時,直接將該參數帶入預設值,簡而言之,這個功能就如同選擇性參數,只是未定義時代入預設值,所以此功能的參數也必須是位於必要參數的後面。

function sayHello(firstName:string, lastName:string, midName:string = "test"): string{
    return [firstName, midName, lastName].join(" ") + " Hello";
}

console.log(sayHello("a","b"))//a test b Hello