javascript - typescript 重载类方法 - 相同的返回类型,不同的参数

标签 javascript typescript

我有一个 typescript 类:

class ContactModel {

    public getUsage(type: string): restangular.IElement {
      return this.getBase().one('usages', type);
    }

    public getUsage(customerId: number, type: string): restangular.IElement {
      return this.ModelFactory.createRequestMapper(ContactModel.options)
        .one('customers', customerId).all('contacts/usages', type);
    }

    //...
}

这会导致编译器抛出以下错误:

>> app/modules/common/model/ContactModel.ts(27,12): error TS2393: Duplicate function implementation.
>> app/modules/common/model/ContactModel.ts(31,12): error TS2393: Duplicate function implementation.

我看到此示例与 TypeScript Handbook 之间的唯一区别是他们的例子有不同的返回类型,而我有相同的返回类型(两种情况都有不同的输入参数)。

问题是:我做错了什么 - 或者 typescript 类方法是否需要具有不同的方法参数类型以允许重载?这看起来很愚蠢,因为 .Net 和 Java 都支持具有相同返回类型和不同输入类型的重载。

最佳答案

JavaScript 不做运行时类型信息,所以你必须自己做重载消歧。请注意,在手册中的示例中,只有一个函数实现,而您有两个。

class ContactModel {
  public getUsage(type: string): restangular.IElement;
  public getUsage(customerId: number, type: string): restangular.IElement;
  public getUsage(typeOrCustomerId: string|number, type?: string): restangular.IElement {
    if (typeof typeOrCustomerId === 'string') {
      // First overload
      return this.getBase().one('usages', type);
    } else {
      // Second overload
      return this.ModelFactory.createRequestMapper(ContactModel.options)
        .one('customers', customerId).all('contacts/usages', type);
    }
  }
}

关于javascript - typescript 重载类方法 - 相同的返回类型,不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31810881/

相关文章:

javascript - 如何自动登录用户node.js Passport.js

typescript - 如何从自定义 Moment 格式获取时间的持续时间(以秒为单位)

typescript - 如何在我的 Typescript React Native 项目中获取 fetch 函数的类型定义?

reactjs - 没有 withStyles 的 material-ui@next?

javascript - 右键单击未出现在正确的位置

javascript - iPhone 上的某些移动浏览器无法正确执行 Javascript

javascript - 如何通过 id 将数组元素与指令中的 dom 类元素绑定(bind)?

javascript - 将 SVG 中的组拆分为位于内容周围的子图像

Angular Karma 不捕获浏览器

javascript - 在 Typescript/JavaScript 中从平面数组构建树数组