Function TypeScript是否允许类型别名指定泛型?

Function TypeScript是否允许类型别名指定泛型?,function,typescript,generics,type-alias,Function,Typescript,Generics,Type Alias,我希望能够对非常通用的函数进行别名,并指定部分通用参数,从而创建同一函数的不太通用的版本。如下所示: function veryGeneric<X, Y>(someParam: Y): { result: X } { // ... } type LessGeneric = typeof veryGeneric<X, string> const lessGeneric: LessGeneric = veryGeneric declare function track

我希望能够对非常通用的函数进行别名,并指定部分通用参数,从而创建同一函数的不太通用的版本。如下所示:

function veryGeneric<X, Y>(someParam: Y): { result: X } {
  // ...
}

type LessGeneric = typeof veryGeneric<X, string>
const lessGeneric: LessGeneric = veryGeneric
declare function track<T = {}, P = {}>(trackingInfo?: TrackingInfo<T, P>, options?: Options<Partial<T>>): Decorator
这有可能吗

我知道我可以创建一个包装器函数,但我更希望不必再次指定参数类型(而且不必支付另一个函数调用的开销,即使它很小,也是一个额外的好处)


这是我正在处理的真实例子。给定函数声明(来自),如下所示:

function veryGeneric<X, Y>(someParam: Y): { result: X } {
  // ...
}

type LessGeneric = typeof veryGeneric<X, string>
const lessGeneric: LessGeneric = veryGeneric
declare function track<T = {}, P = {}>(trackingInfo?: TrackingInfo<T, P>, options?: Options<Partial<T>>): Decorator
您可以这样做:

const lessGeneric: <X>(someParam: string) => { result: X } = veryGeneric;
或者,从
有效分析条目中提取:

type PartiallySpecifiedTrack<T = {}> = <P = {}>(
  trackingInfo?: TrackingInfo<T, P>,
  options?: Options<Partial<T>>)
  => Decorator

const trackSpecificToOurAnalyticsSchema: 
  PartiallySpecifiedTrack<ValidAnalyticsEntries> = track;

好吧,这是我能做的最好的了。祝你好运

要定义泛型类型别名,可以定义描述函数签名的接口:

interface VeryGeneric<X, Y> {
    (someParam: Y): { result: X };
}

type Foo = { foo: number };
type LessGeneric<X = Foo> = VeryGeneric<X, string>;

const lessGeneric: LessGeneric = veryGeneric;
interface VeryGeneric{
(someParam:Y):{result:X};
}
类型Foo={Foo:number};
LessGeneric型=VeryGeneric型;
const lessGeneric:lessGeneric=veryGeneric;

这有什么意义?
X
generic约束没有用处,为什么会有呢?请分享你的真实代码我不认为有必要知道
X
的作用对于这个例子,我添加了一个简单的例子。如果你能更好地描述你的问题,你会得到更好的帮助,在这种情况下,它没有得到很好的解释。如果您只在函数中使用
X
,并且它不是参数或返回类型,则无需将其作为通用约束。我理解这一点,但我的印象是,
/…
部分清楚地表明,有些细节与当前问题无关。我现在添加了一个真实的例子。您会使用相同的函数(
track
),还是实际实现了
trackspecifictoouranalyticschema
?谢谢您的建议!确实没有包装器函数,所以这无疑是一个进步,但我最重要的原因是,我不想再次详细说明所有参数。谢谢。我还没有找到比我上面的答案更详细的东西。谢谢!我仍然需要使用包装器函数,以便让不太通用的版本的用户指定
X
,但至少消费者可以重新使用接口并生成具有自定义默认值的函数。你可以在这里找到这些例子
const anotherTrack: PartiallySpecifiedTrack<{ foo: string }> = track;
declare const trackingInfo: TrackingInfo<{ foo: string }, {bar: number}>
anotherTrack(trackingInfo); // okay
interface VeryGeneric<X, Y> {
    (someParam: Y): { result: X };
}

type Foo = { foo: number };
type LessGeneric<X = Foo> = VeryGeneric<X, string>;

const lessGeneric: LessGeneric = veryGeneric;