7

TypeScriptサービス結果のインターフェースを作成しました。ここで、内部の両方の機能の基本機能を定義したいと思います。問題は、エラーが発生することです。

プロパティ「ServiceResult」はタイプ「サポート」の値に存在しません。

WebStormは開発に使用します(VS2012大規模なプロジェクトでフリーズするため、緊張します-より良い統合を待っています:P)。

これが私がそれを行う方法です:

module Support {
    export interface ServiceResult extends Object {
        Error?: ServiceError;
        Check?(): void;
        GetErrorMessage?(): string;
    }
}

Support.ServiceResult.prototype.Check = () => {
   // (...)
};

Support.ServiceResult.prototype.GetErrorMessage = () => {
   // (...)
};

また、プロトタイプをモジュールに移動しようとしましたが、それでも同じエラーが発生しました... (もちろんSupport.接頭辞を削除しました)。

4

2 に答える 2

9

コンパイルされたJavaScriptはインターフェースに関連するものをまったく出力しないため、インターフェースのプロトタイプを作成することはできません。インターフェイスは、コンパイル時に使用するためだけに存在します。これを見てください:

このTypeScript:

interface IFoo {
    getName();
}

class Foo implements IFoo {
    getName() {
        alert('foo!');
    }
}

このJavaScriptにコンパイルします。

var Foo = (function () {
    function Foo() { }
    Foo.prototype.getName = function () {
        alert('foo!');
    };
    return Foo;
})();

結果にはまったく何もありませんIFoo-それがあなたがそのエラーを受け取っている理由です。通常、インターフェースのプロトタイプを作成するのではなく、インターフェースを実装するクラスのプロトタイプを作成します。

プロトタイプを自分で作成する必要はありません。インターフェイスをクラスとして実装するだけで十分であり、TypeScriptコンパイラがプロトタイプを追加します。

于 2013-03-11T14:20:37.887 に答える
7

インターフェイスに実装を追加しようとしているようです - これは不可能です。

クラスなどの実際の実装にのみ追加できます。を直接使用するのではなく、実装をクラス定義に追加することもできますprototype

module Support {
    export interface ServiceResult extends Object {
        Error?: ServiceError;
        Check?(): void;
        GetErrorMessage?(): string;
    }

    export class ImplementationHere implements ServiceResult {
        Check() {

        }

        GetErrorMessage() {
            return '';
        }
    }
}

Support.ImplementationHere.prototype.Check = () => {
   // (...)
};

Support.ImplementationHere.prototype.GetErrorMessage = () => {
   // (...)
};
于 2013-03-11T14:18:42.937 に答える