首页 > 解决方案 > 打字稿包装类型

问题描述

我有一些工厂方法正在进行一些计算和操作。我也有一个通用方法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?

标签: javascriptangularreactjstypescript

解决方案


你不能在不调用泛型函数的情况下指定它的类型参数。所以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 }

在我看来很好。希望有帮助;祝你好运!


推荐阅读