我希望能够为一个非常通用的函数创建别名,并指定通用参数的某些部分,从而创建一个不那么通用的版本。类似于以下内容:
function veryGeneric<X, Y>(someParam: Y): { result: X } {
// ...
}
type LessGeneric = typeof veryGeneric<X, string>
const lessGeneric: LessGeneric = veryGeneric
我希望lessGeneric
函数的类型定义如下:
function lessGeneric<X>(someParam: string): { result: X } {
// ...
}
有没有任何方法可以做到这一点?
我知道我可以创建一个包装函数,但我更喜欢不必再次指定参数类型(即使只是微小的开销,也不必进行另一个函数调用,这将是一个额外的优势)。
这是我正在处理的真实示例。给定一个函数声明(来自react-tracking),如下所示:
declare function track<T = {}, P = {}>(trackingInfo?: TrackingInfo<T, P>, options?: Options<Partial<T>>): Decorator
我希望能够定义一个别名,指定 trackingInfo
参数的类型,但让 P
保持泛型。也就是说,我希望这个别名的类型实际上是:
interface ValidAnalyticsEntries {
page: string
action: string
}
declare function trackSpecificToOurAnalyticsSchema<P = {}>(trackingInfo?: TrackingInfo<ValidAnalyticsEntries, P>, options?: Options<Partial<ValidAnalyticsEntries>>): Decorator
X
泛型约束没有被使用,它为什么在那里?请分享您真实的代码。 - Nitzan TomerX
的作用,但我添加了一个简单的插图。 - alloyX
,并且它不是参数或返回类型,则无需将其作为通用约束。 - Nitzan Tomer// ...
部分表明了与问题无关的细节。现在我已经添加了真实的示例。 - alloytrack
)还是实际上要实现trackSpecificToOurAnalyticsSchema
? - Nitzan TomertrackSpecificToOurAnalyticsSchema
常量应该保存与track
相同的函数对象引用,因此它将是相同的函数,但在我们的代码中,我将使用trackSpecificToOurAnalyticsSchema
常量来利用特定的类型。这回答了你的问题吗? - alloy