0

次のような新しいジェネリック インターフェイスがあります。

interface IFoo<T> {
    new (scope: T);
}

クラスに実装しようとすると、次のようになります。

class BaseFoo<T> implements IFoo<T> {
    constructor(scope: T) {

    }
}

エラーが表示されます:「クラス BaseFoo はインターフェイス IFoo を宣言していますが、それを実装していません: タイプ 'IFoo' にはコンストラクト シグネチャが必要ですが、タイプ 'BaseFoo' にはシグネチャがありません。」

私は何を間違っていますか?

4

1 に答える 1

1

通常、インターフェイスに構造の詳細を配置することはありません。オブジェクトがどのように構築されるかは、契約の一部ではありません。

インターフェイスは特定の動作の約束であるため、次を使用できます。

interface IFoo<T> {
    getById (id: number) T;
}

必要な操作を実行できるため、コンストラクターに関係なく、インターフェイスの実装を提供できるようになりました。

アイテムにパブリック ハンドルが必要な場合は、インターフェイスにプロパティを設定することもできます。

interface IFoo<T> {
    scope: T;
}

TypeScript のインターフェイスでコンストラクターを定義できる理由は、ライブラリと外部コードの宣言を記述するためにインターフェイスが使用されるためです。そのため、TypeScript クラスとして表現できないもののインターフェイスを記述できると便利です。

于 2013-10-27T08:00:07.347 に答える