用一个必需泛型和多个推断泛型的重写声明函数



尝试这样做:

declare function pipe<S, T1>(op1: OperatorFn<S, T1>): T1
declare function pipe<S, T1, T2>(op1: OperatorFn<S, T1>, op2: OperatorFn<T1, T2>): T2
declare function pipe<S, T1, T2, T3>(op1: OperatorFn<S, T1>, op2: OperatorFn<T1, T2>, op3: OperatorFn<T2,T3>): T3

我希望S是必需的,但我希望其余的都是推断的——无论op1返回的是T1,无论op2返回的是T2,如果你知道我的意思的话。

我知道我上面的东西不起作用,但我不知道如何在我的定义文件中起作用。

编辑:我知道我可以写这样的东西:

export interface pipe<S> {
<T1>(op1: OperatorFn<S, T1>): S;
<T1,T2>(op1: OperatorFn<S, T1>, op2: OperatorFn<T1,T2>): S;
}

但是,我需要在接口文件中声明一个函数,然后该函数将与该接口保持一致。也不知道该怎么做。

编辑#2:

以下内容似乎很容易解决我的问题:

type pipe<S> = <T1,T2>(op1: OperatorFn<S,T1>, op2?: OperatorFn<T1,T2>) => S

但是我不知道如何在我的定义文件中声明一个符合该类型的函数。

因为T1在函数内部以外的任何地方都不使用,所以它允许您执行此操作。

这可以很容易地用type T2 = typeof op2等进行扩展

function pipe<S>(op1: OperatorFn<unkown, unknown>): S {
type T1 = typeof op1 extends TEST<S, infer U> ? U : never
}

您还必须扩展类型S以匹配OperatorFn

最新更新