TypeScript基礎入門-函式-過載
轉載
TypeScript基礎入門 – 函式 – 過載
專案實踐倉庫
https://github.com/durban89/typescript_demo.git
tag: 1.2.5
為了保證後面的學習演示需要安裝下ts-node,這樣後面的每個操作都能直接執行看到輸出的結果。
npm install -D ts-node
後面自己在練習的時候可以這樣使用
npx ts-node 指令碼路徑
函式
過載
JavaScript本身是個動態語言。 JavaScript裡函式根據傳入不同的引數而返回不同型別的資料是很常見的。如下例項
let suits = ["hearts", "spades", "clubs", "diamonds"];
function pickCard(x: any): any {
if (typeof x == "object") {
let pickCard = Math.floor(Math.random() * x.length);
return pickCard;
} else if (typeof x == `number`) {
let pickedSuit = Math.floor(x / 13);
return {
suit: suits[pickedSuit],
card: x % 13,
}
}
}
let myDeck = [
{
suit: "diamands",
card: 2,
},
{
suit: `spades`,
card: 10,
},
{
suit: `hearts`,
card: 4
}
]
let pickedCard1 = myDeck[pickCard(myDeck)];
let pickedCard2 = pickCard(15);
console.log(`card: ` + pickedCard1.card + ` of ` + pickedCard1.suit);
console.log(`card: ` + pickedCard2.card + ` of ` + pickedCard2.suit);
執行後得到型別如下結果
$ npx ts-node src/function_7.ts
card: 2 of diamands
card: 2 of spades
pickCard方法根據傳入引數的不同會返回兩種不同的型別。 如果傳入的是代表紙牌的物件,函式作用是從中抓一張牌。 如果使用者想抓牌,我們告訴他抓到了什麼牌。 但是這怎麼在型別系統裡表示呢。方法是為同一個函式提供多個函式型別定義來進行函式過載。 編譯器會根據這個列表去處理函式的呼叫。 下面我們來過載 pickCard函式。
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): any {
if (typeof x == "object") {
let pickedCard = Math.floor(Math.random() * x.length);
return pickedCard;
} else if (typeof x == `number`) {
let pickedSuit = Math.floor(x / 13);
return {
suit: suits[pickedSuit],
card: x % 13,
}
}
}
let myDeck = [
{
suit: "diamands",
card: 2,
},
{
suit: `spades`,
card: 10,
},
{
suit: `hearts`,
card: 4
}
]
let pickedCard1 = myDeck[pickCard(myDeck)];
let pickedCard2 = pickCard(15);
console.log(`card: ` + pickedCard1.card + ` of ` + pickedCard1.suit);
console.log(`card: ` + pickedCard2.card + ` of ` + pickedCard2.suit);
得到的結果類似如下
$ npx ts-node src/function_7.ts
card: 10 of spades
card: 2 of spades
這樣改變後,過載的pickCard函式在呼叫的時候會進行正確的型別檢查。
為了讓編譯器能夠選擇正確的檢查型別,它與JavaScript裡的處理流程相似。 它查詢過載列表,嘗試使用第一個過載定義。 如果匹配的話就使用這個。 因此,在定義過載的時候,一定要把最精確的定義放在最前面。
注意,function pickCard(x: any): any並不是過載列表的一部分,因此這裡只有兩個過載:一個是接收物件另一個接收數字。 以其它引數呼叫 pickCard會產生錯誤。
本例項結束實踐專案地址
https://github.com/durban89/typescript_demo.git
tag: 1.2.6
相關文章
- TypeScript基礎入門-函式-簡介TypeScript函式
- TypeScript 函式過載TypeScript函式
- TypeScript 基礎入門(一)TypeScript
- TypeScript 之基礎入門TypeScript
- python3.7 函式基礎入門Python函式
- TypeScript入門指南(基礎篇)TypeScript
- C++入門教程(14):過載函式C++函式
- JavaScript入門②-函式(1)基礎{淺出}JavaScript函式
- 2.TypeScript 基礎入門(二)TypeScript
- TypeScript入門完全指南(基礎篇)TypeScript
- 學會TypeScript中函式過載寫法TypeScript函式
- TypeScript基礎入門-變數宣告(一)TypeScript變數
- 請別誤用 TypeScript 過載函式型別TypeScript函式型別
- vue 基礎入門筆記 09:生命週期函式Vue筆記函式
- Python基礎入門(5)- 函式的定義與使用Python函式
- Python常用函式有哪些?Python基礎入門課程Python函式
- TypeScript中函式過載寫法,你在第幾層!TypeScript函式
- php函式入門學習(陣列常見函式2 & 檔案基礎讀寫)PHP函式陣列
- 使用條件型別實現TypeScript中的函式過載型別TypeScript函式
- 函式基礎函式
- TypeScript入門1:註釋、變數常量、資料型別、函式TypeScript變數資料型別函式
- 函式模板過載函式
- Python入門-函式Python函式
- 前端入門——函式前端函式
- 11函式入門函式
- 生成函式入門函式
- 【WEB基礎】HTML & CSS 基礎入門(4)列表及其樣式WebHTMLCSS
- 函式基礎和函式引數函式
- python基礎函式Python函式
- Python基礎-函式Python函式
- python函式基礎Python函式
- C++ 函式過載,函式模板和函式模板過載,選擇哪一個?C++函式
- TypeScript 函式介面TypeScript函式
- TypeScript 函式相容TypeScript函式
- TypeScript---函式TypeScript函式
- TypeScript(6)函式TypeScript函式
- Typescript 入門TypeScript
- TypeScript基礎TypeScript