【发布时间】:2017-09-18 13:50:31
【问题描述】:
我希望能够为一个非常通用的函数起别名并指定通用参数的部分,从而创建同一函数的通用性较低的版本。类似于以下内容:
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泛型约束,为什么会在那里?请分享你的真实代码 -
我不认为有必要知道
X对这个示例做了什么,不过我添加了一个简单的说明。 -
如果你能更好地描述你的问题,你可以获得更好的帮助,而在这种情况下,它没有得到很好的解释。如果您只在函数中使用它并且它不是参数或返回类型,则无需将
X作为通用约束。 -
我明白这一点,但给人的印象是
// ...部分清楚地表明存在与手头问题无关的细节。我现在已经添加了真实的例子。 -
您会使用相同的功能(
track)还是实际实现trackSpecificToOurAnalyticsSchema?
标签: function typescript generics type-alias