Typescript在泛型中推断泛型 问题

Typescript在泛型中推断泛型 问题,typescript,generics,typescript-generics,Typescript,Generics,Typescript Generics,假设我有一个包装好的接口: 接口包装{ 数据:T } 我想定义这样一个函数: 函数f(arg:any):T{ 常量对象:Wrapped=doSomethingAndGetWrappedObject(arg) 返回对象数据 } //不要注意争论,这对问题不重要 常数n:number=f(/*…*/) 问题是,在我的应用程序中,传递number作为类型参数非常不方便,我想传递Wrapped,即调用f,如下所示: 常数n:number=f(/*…*/) 问题是:如何键入f使之成为可能 我试过的

假设我有一个包装好的接口:

接口包装{
数据:T
}
我想定义这样一个函数:

函数f(arg:any):T{
常量对象:Wrapped=doSomethingAndGetWrappedObject(arg)
返回对象数据
}
//不要注意争论,这对问题不重要
常数n:number=f(/*…*/)
问题是,在我的应用程序中,传递
number
作为类型参数非常不方便,我想传递
Wrapped
,即调用
f
,如下所示:

常数n:number=f(/*…*/) 问题是:如何键入
f
使之成为可能

我试过的
函数f(arg:any){
// ...
}
//现在可以了,但是编写第二个类型参数非常烦人
常数n:number=f()
//我想这样做,但它会产生一个错误
//Typescript要么不接受类型参数,要么全部接受
常数n:number=f()
//这只是以一种不可预测的方式工作
函数f(
阿格:有吗
):T包装好了吗?V:有吗{
/* ... */
}

您可以通过使用
推断
关键字创建用于提取泛型类型的帮助器类型

interface Wrapped<T> {
  data: T
}

type ExtractGeneric<T> = T extends Wrapped<infer X> ? X : never

function f<T extends Wrapped<any>>(): ExtractGeneric<T> {
  ....
}

const n = f<Wrapped<number>>()
接口包装{
数据:T
}
类型ExtractGeneric=T扩展包装?X:从来没有
函数f():ExtractGeneric{
....
}
常数n=f()
可能的重复: