javascript - 打字稿包装类型
问题描述
我有一些工厂方法正在进行一些计算和操作。我也有一个通用方法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?
解决方案
你不能在不调用泛型函数的情况下指定它的类型参数。所以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 }
在我看来很好。希望有帮助;祝你好运!
推荐阅读
- javascript - Gatsby 网站需要刷新才能查看新数据
- c# - 如何在插入/光标位置确定有效 XML 文档的架构元素?
- javascript - Typescript 等待一个 void 函数执行,里面有一个 subscribe 方法
- android - 按添加到 Android 中的日期显示 Firebase Storage 中的图像
- java - 如何在线程 1 读取字段时阻止线程 2 更新字段?
- storybook - 组件如何从故事书到实际应用程序?
- laravel - laravel 表单集体选择选项用于编辑选择
- python - xlwings 使用对 pywin32 的 api 参考设置对齐方式
- r - 如何向 Plotly 子图添加第二个 x 轴
- javascript - phantomjs:document.querySelectorAll() 不适用于动态页面