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ù)類型的詳細(xì)內(nèi)容,更多關(guān)于TypeScript 獲取函數(shù)的參數(shù)類型、返回值類型及定義返回函數(shù)類型的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS數(shù)組返回去重后數(shù)據(jù)的方法解析
本文主要分享了Js數(shù)組返回去重后的數(shù)據(jù)的實例代碼。具有一定的參考價值,下面跟著小編一起來看下吧2017-01-01
JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法
這篇文章主要介紹了JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法,使用javascript中的document.links實現(xiàn)這一功能,需要的朋友可以參考下2015-04-04
JavaScript實現(xiàn)倒計時跳轉(zhuǎn)頁面功能【實用】
本文分享了JavaScript實現(xiàn)倒計時跳轉(zhuǎn)頁面功能的具體實例代碼,頁面代碼簡單,直接拷貝就能運行,頁面可以自己美化下哦。需要的朋友一起來看下吧2016-12-12
gameboy網(wǎng)頁闖關(guān)游戲(riddle webgame)--仿微信聊天的前端頁面設(shè)計和難點
本文講如何在網(wǎng)頁端實現(xiàn)一個仿微信的聊天窗口界面, 以及其中涉及到的一些技術(shù)點. 對gameboy闖關(guān)游戲相關(guān)知識感興趣的朋友參考下2016-02-02
JavaScript計算兩個日期時間段內(nèi)日期的方法
這篇文章主要介紹了JavaScript計算兩個日期時間段內(nèi)日期的方法,涉及javascript操作時間的技巧,需要的朋友可以參考下2015-03-03
layer 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

