8

私はこのインターフェースを持っています:

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'のタイプは互換性がありません:タイプ'()=> void'と'{()の署名を呼び出します:ストリング; (x:数値):任意; }'は互換性がありません

これを行うための適切な方法は何ですか?

ありがとう

4

4 に答える 4

6

クラスで関数を宣言するときは、オーバーロードで装飾する必要があります。

getDist(): string;
getDist(x: number): any;
getDist(x?: number): any {
    // your code
 }
于 2012-11-04T14:34:40.757 に答える
5

この回答は、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

于 2012-11-04T14:16:25.060 に答える