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。  分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

日歷

鏈接

個人資料

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

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
亚洲最大激情中文字幕| 欧美影院天天5g天天爽| 韩国三级日本三级少妇99| 亚洲都市激情| 97色婷婷成人综合在线观看| 日韩欧美有码在线| 国产视频一区欧美| bbbbbbbbbbb在线视频| 91超碰在线免费观看| 久久亚洲一区二区三区四区| 国产成人av一区二区三区在线| 欧美色一级片| 天天做天天爱综合| 视频精品二区| 国产精品成人久久久久| 国产亚洲成aⅴ人片在线观看| 欧美亚洲另类在线一区二区三区| 久久蜜桃av一区二区天堂| ccyy激情综合| 日韩性生活视频| а√天堂中文资源在线bt| 日本韩国精品一区二区在线观看| 久久资源亚洲| 亚洲三级在线| 亚洲国产成人精品电影| 亚洲青青青在线视频| 天天综合视频在线观看| 国产不卡123| a级影片在线观看| 成人久久18免费网站麻豆| 色播亚洲视频在线观看| 亚洲成人av中文字幕| 91精品国产麻豆国产在线观看| 亚洲成av人综合在线观看| 丰满诱人av在线播放| 99精品在线免费观看| 影视亚洲一区二区三区| 国产精品人人做人人爽人人添| 奇米影视777在线欧美电影观看| 久久夜夜久久| 欧洲午夜精品| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日韩黄色一区二区| 欧美午夜欧美| 亚洲丝袜av一区| 国产视频久久网| 热久久视久久精品18亚洲精品| 美女被啪啪一区二区| 精品成人影院| 亚洲区一区二区| 少妇高潮一区二区三区99| 欧美黑人极品猛少妇色xxxxx| 日韩五码电影| 日韩在线观看免费全集电视剧网站| 国产麻豆午夜三级精品| 日韩视频二区| 91免费版网站在线观看| 精品一区二区三区免费毛片爱| 国产美女在线观看| sis001欧美| 爱搞国产精品| 日本韩国欧美三级| 91欧美激情一区二区三区成人| 在线观看久久久久久| 国产在线精品一区在线观看麻豆| 国产一区二区精品| 日本三级中国三级99人妇网站| 婷婷成人综合| 亚洲午夜一区二区三区| www.久久久.com| 国产一区二区三区四区五区在线| 91免费精品国偷自产在线| 米奇777在线欧美播放| 午夜欧美精品| 亚洲片国产一区一级在线观看| 性日韩欧美在线视频| 青青在线视频一区二区三区| 国产精品美女一区二区三区| 欧美性xxxx极品hd欧美风情| 97影院在线午夜| 日韩视频免费观看高清在线视频| 亚洲一区国产精品| 成人97人人超碰人人99| 成人黄色国产精品网站大全在线免费观看| 亚洲免费播放| 国产一区二区日韩精品| 高清av不卡| 久久久91精品国产一区二区三区| 在线观看日韩av先锋影音电影院| 色婷婷综合久色| 国产视频一区欧美| 免费看日产一区二区三区| 香蕉av一区二区| 国产精品乱码一区二三区小蝌蚪| 欧美日本国产精品| 久久综合五月| 欧美变态挠脚心| 欧美jizz18hd性欧美| 亚洲免费av片| 日韩av123| 精品久久影院| 中文字幕免费不卡| 日韩一区二区三区免费视频| 中文字幕日韩在线视频| 国产精品三级久久久久久电影| 91精品国产成人观看| 中文在线免费二区三区| 亚洲欧美色婷婷| 99精品视频一区二区| 91偷拍与自偷拍精品| 亚洲自拍欧美色图| 亚洲精品日韩久久| 日韩一区二区视频在线观看| 精品国产免费一区二区三区香蕉| 黄色视屏免费在线观看| 国产日产亚洲精品系列| 69成人精品免费视频| 97在线观看免费| 91超碰免费在线| 一区二区三区 在线观看视频| 成人黄色激情网| 精品日韩在线观看| 芒果视频成人app| 亚洲色图av在线| 欧美国产日本高清在线| 26uuu久久综合| 久久久www免费人成精品| www.99久久热国产日韩欧美.com| 亚洲大尺度美女在线| 日韩欧美一区二区三区免费看| 亚洲成av人片在线观看www| 在线观看wwwxxxx| 周于希免费高清在线观看| 亚洲天堂av高清| 精品91久久久久| 91精品国自产在线观看| 欧美天堂一区| 91综合在线| 亚洲国产日韩欧美一区二区三区| 99国产精品久久久久久久成人热| 精品久久久久久亚洲综合网| 国产95亚洲| 这里有精品可以观看| 日韩影片中文字幕| 成人免费看视频网站| 国产精品免费视频xxxx| 欧美激情亚洲一区| 国产精品毛片久久久久久久久久99999999| 国产精品18久久久久久麻辣| 亚洲福利视频在线| 中文在线日韩| 婷婷激情成人| 91国内精品野花午夜精品| 成年视频在线观看| 亚洲欧洲www| 日韩成人精品一区二区三区| 这里只有精品久久| 日韩在线观看电影完整版高清免费| 亚洲国产精品第一区二区| 欧美黑人视频一区| 国产免费播放一区二区| 99国产精品99久久久久久| 99久久精品久久久久久ai换脸| 亚洲人成电影网站色xx|