分别可以得到 type T0 = string type T1 = void type T2 = unknown,只要满足约束条件 (...args: any) => any,TypeScript 推断出函数的返回值,并借助 infer 关键字将其储存在类型变量 R 中,那么最终得到返回类型 R。 3. 借助 infer 实现元组转联合类型 借助infer 可以实现元组转联合类型,如:[string, num...
答案是number | string,原因是我们用多个infer E((infer E)[]相当于[infer E, infer E]...不就是多个变量指向同一个类型代词E嘛)同时接收到了number和string,所以可以理解为E时而为number时而为string,所以是或关系,这就是协变。 那如果是函数参数呢? typeBar<T> = Textends{a:(x: infer U) =>void...
infer是在typescript 2.8中新增的关键字。 infer可以在extends条件类型的字句中,在真实分支中引用此推断类型变量,推断待推断的类型。 例如:用infer推断函数的返回值类型 typeReturnType<T>= T extends (...args: any[]) => infer R ? R : any; type fn = () => number type fnReturnType = ReturnType...
【转】Typescript中的infer 在extends语句中,支持infer关键字,可以推断一个类型变量,高效的对类型进行模式匹配。但是,这个类型变量只能在true的分支中使用。 // 内置 ReturnTypetypeReturnType<T>= T extends (...args: any[]) => infer R ? R : any; 理解为:如果 T 继承了 (...args: any[]) => a...
在TypeScript 中,infer关键字通常用于推断类型变量。它通常在条件类型和泛型中使用。 下面是一个示例,演示了如何在泛型中使用infer: typeReturnType<T> = Textends(...args:any[]) => infer R ? R :never;functionadd(a:number, b:number):number{returna + b; ...
语句let num中,通过let来声明了一个变量,那怎样声明一个不确定的类型变量呢? 答案是使用infer关键字,infer R就是声明了一个类型变量R。 1. 慕课解释 在条件类型表达式中,可以在extends条件语句中使用infer关键字来声明一个待推断的类型变量。 2. 通过 ReturnType 理解 infer ...
typescript中的infer具有推断类型变量的作用,当我们不知道参数是什么的时候可以使用借助infer这个关键字。让我们来看下具体的使用方法: 1、当泛型是数组时使用 例子:获取数组的最后一项元素 type Last<T extends unknown[]> =T extends [infer F, ...infer R]? R['length'] extends 0 ...
回过头来看第一个需求,拿到第一个参数类型就可以用infer实现了: type GetFirstParamType<T> = T extends (...args: infer R) => any ? R[0] : never 可以理解为,如果此时T满足(...args: any) => any这个结构,同时我们用infer R表示R这个临时变量指代第一个any运行时类型,那么整个函数返回的类型就是...
写法一:类型单一时,可返回正确类型,元组类型时,不好判断 暂返回 字符串 "R" 进行验证 type ElementOf<T> = T extends Array<string | number | boolean> ? "R" : any; // (string|number|boolean)[] // 写法二: 由写法一演变而来 infer RtypeElementOf<T> = TextendsArray<infer R> ? R :any...
现在,在 TypeScript 2.8 之后,我们可以在 extends 条件语句中使用 infer 关键字引入一个变量表示推断的类型,这个变量可以被用在真分支中,也就是说 infer 实际上是一个声明关键字,我们可以用它来声明一个变量,而该变量表示的是 infer 所处位置的类型。