typescript :重复的函数实现消息

标签 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);
    }
}

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

Duplicate function implementation.

有什么想法吗?

最佳答案

正如@cartant 所建议的,您可以使用 overloads在 typescript 中。它们只有一个实现但有多个签名。您可以在手册中阅读相关内容,了解如何使签名和实现很好地协同工作。在你的情况下,你可以这样做:

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值(value),它会拒绝一切。请注意,我不必检查 v 的类型查看它是否是 booleannumber ,我也不必手动指定 T 的值在调用 ConstantImpl<T>构造函数,因为构造函数推断 T 的值来自你传入的参数。

真的,在那种情况下,我想知道你为什么要限制 ConstantImpl.create()只接受 booleannumber值。为什么不走完整的通用路线呢?

  // accept any type
  public static create<T>(v: T): Constant<T> {
    return new ConstantImpl(v);
  }

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

关于 typescript :重复的函数实现消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393643/

相关文章:

javascript - 如何解决 index.tsx 中 hasOwnProperty 的 TypeError

angular - 使用 NgRx 时如何避免不必要的 API 调用

javascript - TypeScript 指定单个函数使用的类型

reactjs - 根据为另一个 prop 提供的值键入一个 prop

javascript - 如何在 mat-form-field 中改变高度

Angular2 - 测试调用内部http服务的函数

javascript - 使用 Angular json + 基于环境在 head 标签中加载第三方 js

javascript - 如何向我的 TypeScript 类添加静态方法?

javascript - 如何比较并获取两个对象数组的值?

javascript - 这个 typescript 方案是什么意思?