typeScript(三) 函數重載


函數重載: 為同一個函數提供多個函數類型定義來進行函數重載。

let suits = ["hearts", "spades", "clubs", "diamonds"];
function pickCard(x: {suit: string; card: number; }[]): number;
function pickCard(x: number): {suit: string; card: number; };
function pickCard(x): any {
    // Check to see if we're working with an object/array
    // if so, they gave us the deck and we'll pick the card
    if (typeof x == "object") {
        let pickedCard = Math.floor(Math.random() * x.length);
       // return pickedCard;
        return 'pickedCard'; // 並不會報錯,編譯是通過的
    }
    // Otherwise just let them pick the card
    else if (typeof x == "number") {
        let pickedSuit = Math.floor(x / 13);
        return { suit: suits[pickedSuit], card: x % 13 };
    }
}

let myDeck = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
let pickedCard1 = myDeck[pickCard(myDeck)];
alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);

let pickedCard2 = pickCard(15);
alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);

函數重載其實就是: 多個函數函數名相同,函數的參數類型,順序,個數不同。注意函數重載與返回值類型無關。ts的函數重載比較雞肋,最終函數邏輯的實現還是在一個函數體內去判斷它的參數類型,然后做相應的操作。ts重載的作用,感覺只是多了一個參數校驗的功能。也就是說在進行函數調用的時候,會對參數進行檢查,只有傳入的參數類型,順序,個數與定義的重載函數的參數相同,才能調用成功,否則報錯。返回值類型不會進行校驗(函數重載與返回值類型無關)。
以上只是我現階段自己的理解,做一個讀后的筆記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM