Typescript:重载泛型方法

时间:2017-12-04 15:41:48

标签: typescript typescript2.0

如何将这些Java方法签名转换为打字稿:

public <E> Expression<E> setProjection(Expression<E> e) {
   //return ...
}

public Expression<?> setProjection(Expression<?>... o) {
    for (Expression<?> e : o)
        this.setProjection(Projections.tuple(o));
    return //...
}

1 个答案:

答案 0 :(得分:1)

在TypeScript中,您可以使用单一方法签名来满足这两种方法(如果我正确地解释事物)......

public setProjection<E>(...e: Expression<E>[]): Expression<E> {

您可以使用一个表达式或多个表达式来调用它。如果您想知道自己是通过了一个还是多个,可以测试e的长度。

如果您不关心E,可以使用setProjection<any>将其设为动态。

附加说明:TypeScript中的重载都装饰了一个方法...这会引导您进行单个实现...这会导致您不会因为签名单向工作而重载。重载看起来像是:

public setProjection<E>(e: Expression<E>): Expression<E>;
public setProjection<E>(...e: Expression<E>[]): Expression<E>;
public setProjection<E>(...e: Expression<E>[]): Expression<E> {

但它与非重载版本相同。

我还没有涵盖方法的实现细节,因为问题出在重载方面。