You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义接收泛型函数作为参数的TypeScript函数?

泛型函数作为参数传递的类型声明问题

我希望将一个泛型函数作为参数传递给另一个函数,且无需在传递时将该泛型函数具体化。示例代码如下:

type F<T> = (p: T) => void

function report(f: F) {
  f<A>({ a: 1 })
  f<B>({ b: "foo" })
}

type A = { a: number }
type B = { b: string }

显然这段代码无法运行,我想知道这是否与TypeScript的#1213号问题相关?

我这么做的原因是要确保传递给f的参数确实符合指定的类型,而函数f本身并不关心具体类型。实际上在我的真实场景中,A和B都继承自同一个类型(这是f唯一需要的部分)。

我目前的解决方案有两种:

  • 使用接口:
interface I {
  f<T>(p: T): void
}

function report2(i: I): void {
  i.f<A>({ a: 1 })
  i.f<B>({ b: "foo" })
}
  • 使用辅助函数:
function ensure<T>(arg: T): T {
  return arg
}

function report3(f: (arg: any) => void): void {
  f(ensure<A>({ a: 1 }))
  f(ensure<B>({ b: "foo" }))
}

有没有更直接的声明方式呢?


内容的提问来源于stack exchange,提问作者max.ott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:31:03