当前位置: 首页 > 知识库问答 >
问题:

函数在接口和类中重载-如何?

融建树
2023-03-14

我有这个界面:

interface IPoint {
    getDist(): string;
    getDist(x: number): any;
}

我需要一个类来实现它,但我无法获得在类中实现getDist()方法的正确语法。。

class Point implements IPoint {
    // Constructor
    constructor (public x: number, public y: number) { }

    pointMethod() { }

    getDist() {
        Math.sqrt(this.x * this.x + this.y * this.y);
    }
    // Static member
    static origin = new Point(0, 0);
}

它说:

类'Point'声明接口'IPoint'但不实现它:类型'Point'和'IPoint'的属性'getDist'的类型不兼容:调用类型'()=

做这件事的正确方法是什么?

谢谢

共有3个答案

沈单弓
2023-03-14

也可以使用默认值

interface Foo{
    next()
    next(steps: number)
    prev()
    prev(steps: number)
}

next(steps: number = 1) {
    // ...
}

prev(steps: number = 1) {
    // ...
}
东方旺
2023-03-14

这个答案描述了如何在TypeScript中实现方法重载,它不漂亮:

interface IPoint {
    getDist(): string;
    getDist(x: number): any;
}

class Point implements IPoint {
    // Constructor
    constructor (public x: number, public y: number) { }

    pointMethod() { }

    getDist(x?: number) {
         if (x && typeof x == "number") {
             return 'foo';
         } else {
             return 'bar';
         }
    }
}

注意:由于接口中声明的返回类型的特定组合,您只能从getDist返回字符串。

白修谨
2023-03-14

在类中声明函数时,需要用重载修饰它:

getDist(): string;
getDist(x: number): any;
getDist(x?: number): any {
    // your code
 }
 类似资料:
  • 问题内容: 关于接口和类,这让我感到困扰。 我正在尝试通过名为IPAddressString的类对名为IPAddress的接口进行实施。Ipadress包含四个部分。 我正在编写一个名为mask的方法,该方法用给定的地址屏蔽当前地址。掩码操作是对地址的所有四个部分进行按位“与”操作。您可以通过我编写的名为getOc​​tet的方法来获得所有四个部分。(您可以在下面看到)。 好的,所以我需要掩盖我的

  • 我想定义一些东西,最好在Python中调用“函数扩展”/“函数接口”或“函数类”。我还没有在其他语言中见过类似的构造,但我不擅长LISP之类的函数式语言。如果这更容易做到,考虑以后改用其他语言,比如Julia。 “函数扩展”将是一种形式化的方式来表示绑定函数的几个参数,我们最终得到一个属于特定“函数类”的函数。在我下面的示例中,特定的“函数类”是一个数据转换函数(如),它只有一个参数:扩展了作为绑

  • 实际代码中 funa 里有其他代码,拼数据一起 ajax 请求类的,上面只是简化代码 func 会调用 funa 并且有其他调用 https://www.typescriptlang.org/zh/play?#code/GYVwdgxgLglg9mABKMBDRAKARgLgM5QBOMYA5gJQ5ggC2WApoQFArTxIrrb5EmkDaAXUrU6jIS3BsEycF1wFiZAD6K

  • Second.CPP 我在表示错误:不允许类型名。那么这个错误的原因是什么呢?我想我还没有完全了解模板的整个机制--我对这个主题非常陌生。

  • null 我不太确定如何处理我的代码,以下是我得到的: 我只是不知道我应该打什么。我相信我已经完成了第一个重载构造函数,但我对此还是新手。 那么,我应该做些什么来使重载构造函数工作呢? 我对Java和面向对象编程非常陌生。

  • 从Kotlin调用Java代码时,存在SAM转换,因此Java代码如下所示: 可以如下所示: 现在,我正在处理一个Kotlin项目,我想将功能接口定义为事件侦听器: 在SomeClass中,我有一个设置监听器的函数: 当我创建这个类的实例并尝试调用setter函数时,我是这样做的: 我知道静态编程语言有函数类型,因此不支持来自各种站点的SAM转换,例如这个站点。 我读过一些关于函数类型的书,但我以