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í)它主要是通過 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 十分類似,不同的是通過 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)于開頭的 (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)文章
javascript同步服務(wù)器時(shí)間和同步倒計(jì)時(shí)小技巧
本文給出如何在頁面上同步顯示服務(wù)器時(shí)間的解決方案,能夠?qū)崿F(xiàn)同步服務(wù)器時(shí)間、同步倒計(jì)時(shí),卻不占用服務(wù)器太多資源,下面我給寫出實(shí)現(xiàn)的思路2015-09-09js實(shí)現(xiàn)類似MSN提示的頁面效果代碼分享
這篇文章主要介紹了模仿MSN消息提示的效果,推薦給大家,有需要的小伙伴可以參考下。2015-08-08JS判斷數(shù)組中是否有重復(fù)值得三種實(shí)用方法
數(shù)組中是否有重復(fù)值的判斷方法有很多,本文為大家推薦下比較實(shí)用的3種方法,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08關(guān)于javascript中的promise的用法和注意事項(xiàng)(推薦)
這篇文章主要介紹了關(guān)于javascript中的promise的用法和注意事項(xiàng),需要的朋友可以參考下2021-01-01uploadify在Firefox下丟失session問題的解決方法
在用uploadify上傳插件時(shí)遇到了一個(gè)問題,在讀session時(shí)認(rèn)為沒有權(quán)限而被攔截了,后來在后臺(tái)打印登錄時(shí)產(chǎn)生session的id和上傳時(shí)讀取session的id,解決方法如下,感興趣的朋友可以了解下2013-08-08