打字稿:复制函数实现消息

时间:2017-11-20 13:52:29

标签: typescript

我已经在我的班级中创建了这两个静态工厂方法:

export class ConstantImpl<T> {
    public static create(b: Boolean): Constant<Boolean> {
        return new ConstantImpl<Boolean>(b);
    }

    public static create(i: Number): Constant<Number> {
        return new ConstantImpl<Number>(i);
    }
}

但是,我收到此编译错误消息:

  

重复的功能实现。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

正如@cartant建议的那样,您可以在TypeScript中使用overloads。它们只有一个实现,但有多个签名。您可以在手册中阅读它,了解如何使签名和实现很好地协同工作。在您的情况下,您可以执行以下操作:

export class ConstantImpl<T> {
  // guessing at your constructor
  public constructor(public val: T) {

  }

  public static create(b: boolean): Constant<boolean>;
  public static create(i: number): Constant<number>;
  public static create(v: boolean | number): Constant<boolean | number> {
        return new ConstantImpl(v);
    }
}

这只允许ConstantImpl.create()接受booleannumber值,并且会拒绝其他所有内容。请注意,我没有必要检查v的类型以查看它是boolean还是number,我也不必手动指定{{1}的值1}}在调用T构造函数时,因为构造函数从传入的参数中推断出<{1}}的值。

实际上,在这种情况下,它让我想知道您为什么要限制ConstantImpl<T>仅接受TConstantImpl.create()值。为什么不去完整的通用路线呢?

boolean

希望有所帮助;祝你好运。

答案 1 :(得分:-1)

正如我在评论中所说,重载并没有在打字稿中实现,例如在JAVA中实现

你可以尝试类似的东西

export class ConstantImpl<T> {
    public static create(a: any): Constant<any> {
        if(typeof a == "Boolean")
           return ConstantImpl.createBoolean(a);
        if(typeof a == "Number")
           return ConstantImpl.createNumber(a);
    }
   public static createBoolean(b: Boolean): Constant<Boolean> {
    return new ConstantImpl<Boolean>(b);
   }

}

ps:我没有测试/编译过这个特定的函数,它只是一个可以存在的示例类型