TypeScript?獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型
事例:
function test(lzwme: string, idx: number) { return { lzwme, idx, }; }
1 獲取函數(shù)的參數(shù)類型
使用預(yù)定義的 Parameters 可以獲取到一個函數(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;
我們可以看到,其實它主要是通過 infer P 獲取到 T 的參數(shù)類型列表 P 并返回,如果 T 不是函數(shù)則返回 never。
2 獲取函數(shù)的返回值類型
使用預(yù)定義的 ReturnType 可以獲取到一個函數(shù)的參數(shù)類型列表。
獲取 test 函數(shù)的返回值類型:
type TestReturnType = ReturnType<typeof test>;
我們再看一下 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ù):
其實這里只是涉及一個簡單的聲明定義而已。
正如:
let myAdd: (x:number, y:number) => number = function(x: number, y: number): number { return x + y; };
只是一個函數(shù)類型聲明(或匿名函數(shù)),如果我們用一個簡單的變量聲明定義,那其完整格式如下:
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; };
也是可以的。
同樣,一個變量的聲明定義也可以是這樣:
let x = 10;
這一點自然是歸咎于TS自動推導(dǎo)能力了。因此,如上也可以簡化成:
const myAdd = (x: number, y: number) => x + y;
=
的前部分一樣省略了,交由ts自動推導(dǎo);而后,就是一個實際的匿名函數(shù)寫法了。
以上就是TypeScript 獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型的詳細內(nèi)容,更多關(guān)于TypeScript 獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS數(shù)組返回去重后數(shù)據(jù)的方法解析
本文主要分享了Js數(shù)組返回去重后的數(shù)據(jù)的實例代碼。具有一定的參考價值,下面跟著小編一起來看下吧2017-01-01JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法
這篇文章主要介紹了JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法,使用javascript中的document.links實現(xiàn)這一功能,需要的朋友可以參考下2015-04-04JavaScript實現(xiàn)倒計時跳轉(zhuǎn)頁面功能【實用】
本文分享了JavaScript實現(xiàn)倒計時跳轉(zhuǎn)頁面功能的具體實例代碼,頁面代碼簡單,直接拷貝就能運行,頁面可以自己美化下哦。需要的朋友一起來看下吧2016-12-12gameboy網(wǎng)頁闖關(guān)游戲(riddle webgame)--仿微信聊天的前端頁面設(shè)計和難點
本文講如何在網(wǎng)頁端實現(xiàn)一個仿微信的聊天窗口界面, 以及其中涉及到的一些技術(shù)點. 對gameboy闖關(guān)游戲相關(guān)知識感興趣的朋友參考下2016-02-02JavaScript計算兩個日期時間段內(nèi)日期的方法
這篇文章主要介紹了JavaScript計算兩個日期時間段內(nèi)日期的方法,涉及javascript操作時間的技巧,需要的朋友可以參考下2015-03-03layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實例
今天小編就為大家分享一篇layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09調(diào)試Javascript代碼(瀏覽器F12及VS中debugger關(guān)鍵字)
目前,常用的瀏覽器IE、Chrome、Firefox都有相應(yīng)的腳本調(diào)試功能下面我就介紹如何在瀏覽器/VS中調(diào)試我們的JS代碼,感興趣的你可不要走開啊,希望本文對你有所幫助2013-01-01