打字稿包装类型

时间:2018-11-22 22:11:37

标签: javascript angular reactjs typescript

我有一些工厂方法正在进行一些计算和操作。我也有一个通用的方法doSomething。我不想每次都指定doSomething的类型。我想为工厂方法做一次,然后每次用已经分配的类型来获取它

function factory<T>(t: T){
// some computations

return {method: doSomething<T>} <- this is what I wanna do
}

// Generic
function<T extends object>doSomething(): T{
//complex stuff, a lot of lambdas
}

如何从工厂方法返回具有所有已分配类型的doSomething?

1 个答案:

答案 0 :(得分:1)

您不能在不调用泛型函数的情况下指定其类型参数。因此doSomething<T>是不可接受的;仅允许doSomething<T>()。幸运的是,您可以返回一个具体函数,该函数使用指定的正确类型参数调用泛型函数。像这样:

function factory<T extends object>(t: T) {
  // some computations
  return { method: ()=>doSomething<T>() } 
}

// Generic, note generic parameter comes after the function name
declare function doSomething<T extends object>(): T;

让我们看看它是否有效:

const ret = factory({a: "hey"}).method();
// const ret: { a: string }

对我很好。希望能有所帮助;祝你好运!