成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊 Vue 3 中使用的函數重載有啥用?

開發 前端
當使用字符串阿寶哥作為參數調用 greet 函數時,將會返回 "Hello, 阿寶哥!"。那么現在問題來了,如果我們希望 greet 函數能同時支持輸入用戶列表并返回相應的問候列表那該咋辦?

你知道下圖中為什么定義了那么多個 ref 函數,它們的作用是什么?如果不清楚的話,閱讀完本文的內容,也許你就懂了。

這是一個簡單的 greet 函數,它接收一個字符串類型的參數,其返回值的類型也是字符串類型。

function greet(person: string): string {
return `Hello, ${person}!`;
}

當使用字符串阿寶哥作為參數調用 greet 函數時,將會返回 "Hello, 阿寶哥!"。那么現在問題來了,如果我們希望 greet 函數能同時支持輸入用戶列表并返回相應的問候列表那該咋辦?

給你 3 秒鐘的時間思考一下,你想到答案了么?其中一種方案是使用聯合類型。

function greet(person: string | string[]): string | string[] {  
if (typeof person === "string") {
return `Hello, ${person}!`;
} else if (Array.isArray(person)) {
return person.map((name) => `Hello, ${name}!`);
}
throw new Error("Unable to greet");
}

而另一種解決方案是使用函數重載,使用函數重載技術,我們需要定義重載簽名和實現簽名。

其中重載簽名定義了函數中每個參數的類型和函數的返回值類型,但不包含函數體。一個函數可以有多個重載簽名。

而實現簽名的參數類型和返回值類型都需要使用更通用的類型,且還會包含實現該簽名的函數體。一個函數只能含有一個實現簽名。

結合了重載簽名和實現簽名之后,我們就實現了前面所說的功能:

// 重載簽名
function greet(person: string): string;
function greet(persons: string[]): string[];

// 實現簽名
function greet(person: unknown): unknown {
if (typeof person === 'string') {
return `Hello, ${person}!`;
} else if (Array.isArray(person)) {
return person.map(name => `Hello, ${name}!`);
}
throw new Error('Unable to greet');
}

在實際使用的過程中,只有重載簽名才是可以調用的,調用函數之后的返回值就能夠被推導出正確的類型。

需要注意的是,當 TypeScript 編譯器處理函數重載時,它會查找重載列表,嘗試使用第一個重載定義。如果匹配的話就立即返回。當使用實現簽名對應類型的參數調用實現簽名函數時將會出現錯誤。

除了重載普通函數之外,我們也可以對類中的方法進行重載。方法重載是指在同一個類中方法同名,參數不同(參數類型不同、參數個數不同或參數個數相同時參數的先后順序不同),調用時根據實參的形式,選擇與它匹配的方法執行操作的一種技術。

下面我們來看一個方法重載的例子:

class Calculator {
add(a: number, b: number): number;
add(a: string, b: string): string;
add(a: string, b: number): string;
add(a: number, b: string): string;
add(a: string | number, b: string | number) {
if (typeof a === 'string' || typeof b === 'string') {
return a.toString() + b.toString();
}
return a + b;
}
}

const calculator = new Calculator();
const result = calculator.add('Semlinker', ' Kakuqo');

閱讀完本文之后,你應該就知道 Vue 3 響應式模塊中的 ref 函數背后使用了什么技術。

責任編輯:姜華 來源: 全棧修仙之路
相關推薦

2022-07-04 08:54:39

Swift處理器項目

2020-11-12 08:32:14

Vue3模板優化

2022-01-11 06:53:23

面試重寫重載

2024-07-26 08:50:57

2009-09-01 11:28:32

C#使用函數重載

2021-11-22 11:05:20

Vue 3setup前端

2022-08-11 11:35:43

Vuev-model?表單

2022-02-28 08:17:24

重載函數JS前端

2022-07-06 10:02:12

Vue3.2ExposeAPI

2024-10-15 07:42:09

Vue動態加載

2022-03-29 08:30:47

指針數組C語言

2021-02-04 15:08:37

Vue漸進式框架

2022-02-23 08:18:06

nginx前端location

2021-08-01 07:58:58

Vue 加載組件

2017-07-14 10:10:08

Vue.jsMixin

2020-02-10 10:23:03

VueJSX前端

2024-06-03 10:00:51

Vue 3語法插槽

2024-04-07 00:00:10

Rust枚舉C代碼

2022-06-28 15:13:12

Vuediff 算法

2021-05-28 08:52:45

Hive分析函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲一区二区三区 | 久久小视频 | 亚洲电影一区二区三区 | 日韩视频一区二区 | 伊人免费在线观看高清 | 国产污视频在线 | 欧美美女爱爱视频 | 久久久久久久亚洲精品 | 中文字幕精品一区二区三区精品 | 久久久精品视频一区二区三区 | 国产一区二区精品在线 | 亚洲一区三区在线观看 | 国产成人精品久久二区二区91 | 日韩乱码av| 蜜月va乱码一区二区三区 | 国产精品视频久久久 | 欧美二区乱c黑人 | 一区二区国产精品 | 99国内精品久久久久久久 | 日韩毛片免费视频 | 91资源在线 | 亚洲欧美视频一区 | 欧美激情精品久久久久 | 在线成人 | 992tv人人草 久久精品超碰 | 国产精品国产精品国产专区不卡 | 国产精品电影网 | 国产精品亚洲精品 | 国产不卡在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产激情视频在线免费观看 | 色婷婷av99xx| 欧美成人一区二区三区片免费 | 国产传媒毛片精品视频第一次 | 草比av| 天天草av| 全免费a级毛片免费看视频免费下 | 国产高清在线观看 | 国产精品不卡一区 | 日韩在线一区二区 | 国产91在线视频 |