TypeScript中infer關(guān)鍵字的具體使用
infer 是 TypeScript 中的高級(jí)類型關(guān)鍵字,主要用于條件類型中推斷類型。它允許我們?cè)跅l件類型的 extends 子句中聲明一個(gè)類型變量,然后在該條件類型的 true 分支中使用這個(gè)推斷出的類型。
1. 基本語(yǔ)法
type SomeType<T> = T extends infer U ? U : never;
2. 主要用途
1. 從復(fù)雜類型中提取子類型;
2. 實(shí)現(xiàn)類型解構(gòu);
3. 創(chuàng)建更靈活的工具類型;
3. 常見(jiàn)示例
3.1. 提取函數(shù)返回類型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function foo(): number {
return 42;
}
type FooReturn = ReturnType<typeof foo>; // number3.2. 提取數(shù)組/元組元素類型
type ElementType<T> = T extends (infer U)[] ? U : never; type StrArray = string[]; type StrElement = ElementType<StrArray>; // string
3.3. 提取數(shù)組/元組元素類型
type UnpackPromise<T> = T extends Promise<infer U> ? U : T; type PromiseNumber = Promise<number>; type NumberType = UnpackPromise<PromiseNumber>; // number
3.4. 提取函數(shù)參數(shù)類型
type Parameters<T> = T extends (...args: infer P) => any ? P : never;
function bar(a: string, b: number): void {}
type BarParams = Parameters<typeof bar>; // [string, number]3.5. 提取構(gòu)造函數(shù)實(shí)例類型
type InstanceType<T> = T extends new (...args: any[]) => infer R ? R : any;
class MyClass {}
type MyInstance = InstanceType<typeof MyClass>; // MyClass3.6. 實(shí)現(xiàn)類型反轉(zhuǎn)(將元組類型順序反轉(zhuǎn))
type Reverse<T> = T extends [infer First, ...infer Rest] ? [...Reverse<Rest>, First] : T; type Original = [1, 2, 3]; type Reversed = Reverse<Original>; // [3, 2, 1]
4. 注意事項(xiàng)
1. infer 只能在條件類型的 extends 子句中使用;
2. 同一類型變量可以在多個(gè)位置進(jìn)行 infer,但必須推斷出相同的類型;
3. 如果無(wú)法推斷出類型,則條件類型會(huì)返回 never 或指定的默認(rèn)類型;
infer 是 TypeScript 類型編程中非常強(qiáng)大的工具,它使得類型操作更加靈活和強(qiáng)大,特別是在創(chuàng)建復(fù)雜工具類型時(shí)非常有用。
到此這篇關(guān)于TypeScript中infer關(guān)鍵字的具體使用的文章就介紹到這了,更多相關(guān)TypeScript infer關(guān)鍵字使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript中分號(hào)的一些細(xì)節(jié)
這篇文章主要給大家介紹了關(guān)于JavaScript中分號(hào)的一些細(xì)節(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
layui table表格數(shù)據(jù)的新增,修改,刪除,查詢,雙擊獲取行數(shù)據(jù)方式
今天小編就為大家分享一篇layui table表格數(shù)據(jù)的新增,修改,刪除,查詢,雙擊獲取行數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
ECharts事件處理與旭日?qǐng)D實(shí)現(xiàn)
這篇文章介紹了ECharts事件處理與實(shí)現(xiàn)旭日?qǐng)D的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
微信公眾平臺(tái)API錯(cuò)誤代碼41002的問(wèn)題解決辦法
今天在研究微信公眾號(hào)接口問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于微信公眾平臺(tái)API錯(cuò)誤代碼41002問(wèn)題的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
微信小程序?qū)崿F(xiàn)Timeline時(shí)間線效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)Timeline時(shí)間線效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
非html5實(shí)現(xiàn)js版彈球游戲示例代碼
彈球游戲,一般都是使用html5來(lái)實(shí)現(xiàn)的,其實(shí)不然,使用js也可以實(shí)現(xiàn)類似的效果,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09

