TypeScript?獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型
事例:
function test(lzwme: string, idx: number) { return { lzwme, idx, }; }
1 獲取函數(shù)的參數(shù)類型
使用預(yù)定義的 Parameters 可以獲取到一個(gè)函數(shù)的參數(shù)類型列表。
獲取 test 函數(shù)的參數(shù)類型:
type TestArgsType = Parameters<typeof test>; // TestArgsType => [lzwme: string, idx: number]
獲取 idx 參數(shù)的類型:
type TestArgsType = Parameters<typeof test>[1]; // TestArgsType => idx: number
我們看一下 Parameters 的定義:
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
我們可以看到,其實(shí)它主要是通過(guò) infer P 獲取到 T 的參數(shù)類型列表 P 并返回,如果 T 不是函數(shù)則返回 never。
2 獲取函數(shù)的返回值類型
使用預(yù)定義的 ReturnType 可以獲取到一個(gè)函數(shù)的參數(shù)類型列表。
獲取 test 函數(shù)的返回值類型:
type TestReturnType = ReturnType<typeof test>;
我們?cè)倏匆幌?nbsp;ReturnType 的定義:
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
與 Parameters 十分類似,不同的是通過(guò) infer R 獲取并返回 T 的返回值類型。
TypeScript定義返回函數(shù)類型
一般函數(shù)聲明:
//第一種形式 let c: Function; c = function(): void { console.log('It work'); } //第二種形式 function test(): Function{ return function():void{ console.log('it work'); } } let a:Function = test(); a(); //第三種形式,箭頭函數(shù) let d: (para: string) => string; d = function(param: string): string { return param; } //第四種形式,類型別名,箭頭函數(shù) type e = (para: string) => string; const f:e = function(pass: string): string{ return pass; } //第五種形式,接口 interface g{ (para: string): string; } const h: g = function(pass: string): string{ return pass; }
箭頭函數(shù):
其實(shí)這里只是涉及一個(gè)簡(jiǎn)單的聲明定義而已。
正如:
let myAdd: (x:number, y:number) => number = function(x: number, y: number): number { return x + y; };
只是一個(gè)函數(shù)類型聲明(或匿名函數(shù)),如果我們用一個(gè)簡(jiǎn)單的變量聲明定義,那其完整格式如下:
let x: number = 10;
其上的 number
部分相當(dāng)于開(kāi)頭的 (x:number, y:number) => number
,這一部分即是類型(或函數(shù)類型),只是一種定義;哪怕你使用:
let myAdd: (aaaaaaaaaaaaaaaaaaaaaa:number, bbbbbbbbbbbbbbbbbbbbbbbb:number) => number = function(x: number, y: number): number { return x + y; };
也是可以的。
同樣,一個(gè)變量的聲明定義也可以是這樣:
let x = 10;
這一點(diǎn)自然是歸咎于TS自動(dòng)推導(dǎo)能力了。因此,如上也可以簡(jiǎn)化成:
const myAdd = (x: number, y: number) => x + y;
=
的前部分一樣省略了,交由ts自動(dòng)推導(dǎo);而后,就是一個(gè)實(shí)際的匿名函數(shù)寫法了。
以上就是TypeScript 獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型的詳細(xì)內(nèi)容,更多關(guān)于TypeScript 獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS數(shù)組返回去重后數(shù)據(jù)的方法解析
本文主要分享了Js數(shù)組返回去重后的數(shù)據(jù)的實(shí)例代碼。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01JavaScript返回網(wǎng)頁(yè)中超鏈接數(shù)量的方法
這篇文章主要介紹了JavaScript返回網(wǎng)頁(yè)中超鏈接數(shù)量的方法,使用javascript中的document.links實(shí)現(xiàn)這一功能,需要的朋友可以參考下2015-04-04JavaScript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)頁(yè)面功能【實(shí)用】
本文分享了JavaScript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)頁(yè)面功能的具體實(shí)例代碼,頁(yè)面代碼簡(jiǎn)單,直接拷貝就能運(yùn)行,頁(yè)面可以自己美化下哦。需要的朋友一起來(lái)看下吧2016-12-12javascript實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲
本文很簡(jiǎn)單,給大家分享了一段使用javascript實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲的代碼,算是對(duì)自己學(xué)習(xí)javascript的一次小小的總結(jié),代碼參考了網(wǎng)友的部分內(nèi)容,推薦給大家,希望對(duì)大家能夠有所幫助。2015-03-03gameboy網(wǎng)頁(yè)闖關(guān)游戲(riddle webgame)--仿微信聊天的前端頁(yè)面設(shè)計(jì)和難點(diǎn)
本文講如何在網(wǎng)頁(yè)端實(shí)現(xiàn)一個(gè)仿微信的聊天窗口界面, 以及其中涉及到的一些技術(shù)點(diǎn). 對(duì)gameboy闖關(guān)游戲相關(guān)知識(shí)感興趣的朋友參考下2016-02-02JavaScript計(jì)算兩個(gè)日期時(shí)間段內(nèi)日期的方法
這篇文章主要介紹了JavaScript計(jì)算兩個(gè)日期時(shí)間段內(nèi)日期的方法,涉及javascript操作時(shí)間的技巧,需要的朋友可以參考下2015-03-03Three.JS實(shí)現(xiàn)三維場(chǎng)景
這篇文章主要為大家詳細(xì)介紹了Three.JS實(shí)現(xiàn)三維場(chǎng)景,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09調(diào)試Javascript代碼(瀏覽器F12及VS中debugger關(guān)鍵字)
目前,常用的瀏覽器IE、Chrome、Firefox都有相應(yīng)的腳本調(diào)試功能下面我就介紹如何在瀏覽器/VS中調(diào)試我們的JS代碼,感興趣的你可不要走開(kāi)啊,希望本文對(duì)你有所幫助2013-01-01