【轉(zhuǎn)】Typescript中的infer

在extends語句中,支持infer關(guān)鍵字,可以推斷一個類型變量,高效的對類型進行模式匹配。但是,這個類型變量只能在true的分支中使用。

// 內(nèi)置 ReturnType
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

理解為:如果 T 繼承了 (...args: any[]) => any 類型,則返回類型 R,否則返回 any。其中 R 是什么呢?R 被定義在 extends (...args: any[]) => infer R 中,即 R 是從傳入?yún)?shù)類型中推導(dǎo)出來的。

栗子

// 如果泛型T是()=> infer R的子集,則返回infer R獲取到的類型,否則返回boolean
type Func<T> = T extends () => infer R ? R : boolean;

let func1: Func<number>; // boolean;
let func2: Func<''>; // boolean
let func3: Func<() => Promise<number>>; // Promise<number>
type Obj<T> = T extends { a: infer VT, b: infer VT } ? VT : number;

let obj1: Obj<string>;  // number;
let obj2: Obj<true>;  // number;
let obj3: Obj<{a: string, b: string}>;   // string
let obj4: Obj<a: number, b: string>;   // string | number
// 當(dāng)a、b為不同類型時,返回聯(lián)合類型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容