92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

【TypeScript】TS進階-函數重載(七)

2023-1-11    前端達人

TypeScript從入門到實踐專欄是博主在學習和工作過程中的總結,實用性非常強,歡迎訂閱哦,學會TS不迷路。

TS系列 標題
基礎篇 TS入門(一)
基礎篇 TS類型聲明(二)
基礎篇 TS接口類型(三)
基礎篇 TS交叉類型&聯合類型(四)
基礎篇 TS類型斷言(五)
基礎篇 TS類型守衛(六)
進階篇 TS函數重載(七)
進階篇 TS泛型(八)
進階篇 TS裝飾器(九)

函數默認參數/可選參數

對于同一個函數我們在不同場景下傳參,參數有時候全部需要,有時候部分需要,定義多個同名函數就會報錯,那么該怎么實現這個操作呢?我們可以為函數設置默認參數和可選參數。
給每個參數添加類型之后,可以不用給函數本身添加返回值類型,因為TS能根據返回語句自動推斷出返回值類型

function start(name:string,age:number,phone?:number,sex?:string):string{ if(phone&&sex){ return `name:${name},age:${age},phone:${phone},sex:${sex}` }else{ return `name:${name},age:${age}` } } start('zhangsan','14')//name:zhangsan,age:14 start('zhangsan','14',15678777777,'男')//name:zhangsan,age:14,phone:15678777777,sex:男 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

另外我們看它編譯后的樣子,其中返回值使用了concat連接字符串,也讓我們學習到模版字符串的實現原理。

function start(name, age, phone, sex) { if (phone && sex) { return "name:".concat(name, ",age:").concat(age, ",phone:").concat(phone, ",sex:").concat(sex); } else { return "name:".concat(name, ",age:").concat(age); } } start('zhangsan', 14); //name:zhangsan,age:14 start('zhangsan', 14, 15678777777, '男'); //name:zhangsan,age:14,phone:15678777777,sex:男 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

但是我們要是有很多場景,參數類型也都不一致,我們這樣寫很難維護,并且定義的規范很難適用于實際多個場景,那么我們可以使用函數重載來處理。

函數重載

什么事函數重載呢?當我們多次調用函數時傳遞不同參數數量或者類型,函數會做出不同處理。

1、函數簽名

這里介紹個名次「函數簽名」,顧名思義,函數簽名主要定義了參數及參數類型,返回值及返回值類型。函數簽名不同,函數會做出不同的處理,這是我對函數重載的理解。

2、構造器重載

舉個例子,聲明一個類Course,里面寫一個start的方法,我們調用 start時傳入不同參數類型已經參數個數,start方法會做出不同處理,那么怎么實現呢?具體如下:

type Combinable = number | string; class Course { //定義重載簽名 begin(name: number, score: number): string; begin(name: string, score: string): string; begin(name: string, score: number): string; begin(name: number, score: string): string; //定義實現簽名 begin(name: Combinable, score: Combinable) { if (typeof name === 'string' || typeof score === 'string') { return 'student:' + name + ':' + score; } } } const course = new Course(); course.begin(111, 5);//沒有輸出 course.begin('zhangsan', 5);//student:zhangsan:5 course.begin(5, 'zhangsan');//student:5:zhangsan 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

以上代碼中定義了4個重載前面和1個實現簽名。

3、聯合類型函數重載

聲明一個函數arithmetic,參數類型為聯合類型,返回值也是聯合類型,但是如下代碼卻報錯了。

function arithmetic(x: number | string): number | string { if (typeof x === 'number') { return x; } else { return x+'是字符串'; } } arithmetic(1).length; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在這里插入圖片描述

原因是沒有明確函數string類型沒有toFixed屬性`,那么怎么用函數重載解決這個報錯問題呢?
我們可以可以根據傳參的類型和函數返回值聲明多個同名的函數,只是類型和返回值不同而已。

function arithmetic(x: number): number; function arithmetic(x: string): string; function arithmetic(x: number | string): number | string { if (typeof x === 'number') { return x; } else { return x+'是字符串'; } } arithmetic(1).toFixed(1); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這樣就不會報錯啦,因為已經識別到arithmetic(1)的返回值是number類型。

拓展JS中函數重載

JS中函數重載怎么實現呢?

1、利用arguments參數

var arr = [1,2,3,4,5]; //注意:這里不能寫成箭頭函數,否則this指向的是window對象 Array.prototype.search = function() { var len = arguments.length; switch(len){ case 0: return this; case 1: return `${arguments[0]}`; case 2: return `${arguments[0]},${arguments[1]}`; } } console.log(arr.search()) //[1,2,3,4,5] console.log(arr.search(1)) //1 console.log(arr.search(1,2)) //1,2 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2、利用閉包和arguments

 function addMethod (obj, name, fn) { var old = obj[name]; obj[name] = function () { if (fn.length === arguments.length) { return fn.apply(this, arguments) } else if (typeof old === 'function') { return old.apply(this, arguments) } } } var person = {name: 'zhangsan'} addMethod(person, 'getName', function () { console.log(this.name + '---->' + 'getName1') }) addMethod(person, 'getName', function (str) { console.log(this.name + '---->' + str) }) addMethod(person, 'getName', function (a, b) { console.log(this.name + '---->' + (a + b)) }) person.getName() person.getName('zhangsan') person.getName(10, 20) 


 來源:csdn 藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~ 希望得到建議咨詢、商務合作,也請與我們聯系01063334945。  分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。  藍藍設計www.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

日歷

鏈接

個人資料

藍藍設計的小編 http://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
91久久久国产精品| 亚洲成人久久一区| 欧美亚洲成人精品| 亚洲人成网站999久久久综合| 国内精品久久久久久中文字幕| 国产免费观看久久黄| 亚洲激情电影中文字幕| 欧美亚洲午夜视频在线观看| 91精品久久久久久久久久| 欧美高清不卡在线| 亚洲天堂av女优| 国产丝袜一区二区三区免费视频| 亚洲综合国产精品| 一区二区三区四区精品| 18性欧美xxxⅹ性满足| 一道本无吗dⅴd在线播放一区| 欧美在线视频免费| 日本中文字幕久久看| 欧美国产高跟鞋裸体秀xxxhd| 欧美日韩久久久久| 美女av一区二区三区| 欧美极品少妇xxxxx| 欧美疯狂做受xxxx高潮| 日韩免费观看av| 国产精品免费观看在线| 色偷偷91综合久久噜噜| 国产精品流白浆视频| 国产99久久精品一区二区| 91色在线观看| 中文字幕欧美日韩在线| 午夜精品久久久久久久99热浪潮| 色中色综合影院手机版在线观看| 不用播放器成人网| 热久久美女精品天天吊色| 欧美成在线视频| 久久免费少妇高潮久久精品99| 精品欧美国产一区二区三区| 精品久久国产精品| 中文字幕亚洲第一| 国产成人福利网站| 在线观看欧美www| 亚洲性线免费观看视频成熟| 亚洲综合中文字幕68页| 亚洲欧美成人精品| 国产一区玩具在线观看| 日韩欧美第一页| 98精品在线视频| 国产精品一区二区久久久久| 91中文字幕在线| 亚洲在线一区二区| 欧美国产精品va在线观看| 国产成人激情小视频| 久久久国产精品视频| 国产精品尤物福利片在线观看| 久久综合久久八八| 疯狂欧美牲乱大交777| 18性欧美xxxⅹ性满足| 亚洲欧美日韩国产中文专区| 一区二区三区久久精品| 美女视频黄免费的亚洲男人天堂| 一本久久综合亚洲鲁鲁| 国产精品日韩在线一区| 日韩av影视在线| 色樱桃影院亚洲精品影院| 播播国产欧美激情| 国产成人精品一区二区| 亚洲国产精品久久91精品| 日韩精品免费在线观看| 成人免费视频网| 日韩小视频网址| 高清欧美一区二区三区| 国产精品久久久久福利| 亚洲精品成人网| 国产成人综合av| 视频一区视频二区国产精品| 久久久视频精品| 久久精品国产亚洲精品2020| 亚洲精品久久久久久久久久久久| 欧美在线xxx| 亚洲免费视频网站| 久久69精品久久久久久久电影好| 国产一区二区黑人欧美xxxx| 少妇高潮久久77777| 日韩中文字幕在线精品| 狠狠躁夜夜躁人人爽天天天天97| 欧美最顶级丰满的aⅴ艳星| 91免费观看网站| 日韩在线视频中文字幕| 欧美一性一乱一交一视频| 精品一区二区三区三区| 欧美黑人狂野猛交老妇| 国产精品视频一区国模私拍| 日韩av色综合| 精品久久久久久亚洲精品| 国产视频999| 欧美性猛交xxxx黑人猛交| 欧美在线观看网站| 国产精品久久久久久搜索| 97香蕉久久夜色精品国产| 日韩欧美国产黄色| 国产91精品青草社区| 欧美激情精品久久久久久黑人| 久久久久久久久亚洲| 在线播放日韩av| 欧洲精品在线视频| 青青在线视频一区二区三区| 九九九久久国产免费| 亚洲男人天堂古典| 亚洲精品98久久久久久中文字幕| 精品国产电影一区| 国产精品偷伦一区二区| 欧美一级视频免费在线观看| 国产日产久久高清欧美一区| 日韩高清人体午夜| 久久国产精品亚洲| 国产亚洲在线播放| 亚洲自拍偷拍一区| 亚洲午夜精品久久久久久性色| 97不卡在线视频| 国产成人精品视| 亚洲永久在线观看| 亚洲国产精品va在线观看黑人| 欧美黄色性视频| 色妞久久福利网| 91综合免费在线| 国产美女久久精品香蕉69| 亚洲一区二区三区成人在线视频精品| 麻豆国产精品va在线观看不卡| 韩国三级日本三级少妇99| 久久97精品久久久久久久不卡| 国产精品亚洲аv天堂网| 久久综合伊人77777尤物| 欧美亚洲成人免费| 中文字幕日韩综合av| 国产日本欧美视频| 日韩小视频在线观看| 成人做爽爽免费视频| 久久久国产视频91| 精品久久久久久久中文字幕| 国产性猛交xxxx免费看久久| 伊人成人开心激情综合网| 日韩欧美在线网址| 日韩电影大片中文字幕| 精品亚洲夜色av98在线观看| 国产精品视频免费在线| 亚洲综合视频1区| 久久久av一区| 97欧美精品一区二区三区| 美女精品视频一区| 久久精品国产欧美亚洲人人爽| 91社影院在线观看| 亚洲成人黄色在线| 亚洲国产精品成人一区二区| 91久久久国产精品| 欧美精品xxx| 国产专区欧美专区| 亚洲男人天堂网站| 狠狠做深爱婷婷久久综合一区| 欧美日韩国产精品一区二区不卡中文| 一区二区三区在线播放欧美| 日韩精品在线私人| 亚洲精品欧美极品| 亚洲欧美日韩一区二区在线| 高清一区二区三区四区五区|