如何定义接收泛型函数作为参数的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
相关产品推荐
相关产品推荐

