函數重載: 為同一個函數提供多個函數類型定義來進行函數重載。
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重載的作用,感覺只是多了一個參數校驗的功能。也就是說在進行函數調用的時候,會對參數進行檢查,只有傳入的參數類型,順序,個數與定義的重載函數的參數相同,才能調用成功,否則報錯。返回值類型不會進行校驗(函數重載與返回值類型無關)。
以上只是我現階段自己的理解,做一個讀后的筆記。
