我想把一个‘泛型’函数作为参数传递给一个函数,而不是在那个时候‘专门化’该函数.类似于:
type F<T> = (p: T) => void
function report(f: F) {
f<A>({ a: 1 })
f<B>({ b: "foo" })
}
// with
type A = { a: number }
type B = { b: string }
这显然行不通.我想知道我在这里需要的是不是与https://github.com/Microsoft/TypeScript/issues/1213有关?
想要这样做的原因是为了确保WAW将被传递到f
个IS
确实是所提供的特定类型的.该函数本身并不真正关心.实际上,
在我的实际用例中,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" }))
}
有没有更直接的方法来说明这一点?