2016-03-23 24 views
2

コンパイラエラーインターフェイスの実装時にタイプスクリプトエラー

'MessageBus'クラスが 'IMessageBus'インターフェイスを正しく実装していません。 'MessageBus'タイプの 'dispatch'プロパティがありません。

IMessageBus Interface-

export interface IMessageBus { 
    dispatch: (eventName: string, info?: any) => void; 
    listen: (eventName: string, callback: Function) => void; 
} 

MessageBusクラス -

import {IMessageBus} from './IMessageBus'; 

export class MessageBus implements IMessageBus { 
    static listeners: Object[] = []; 
    public static dispatch(event: string, info?: any): void { 
    this.listeners 
     .forEach((l) => { 
      if (l["event"] === event) { 
       l["cb"](info); 
      } 
     }); 
    } 

    public static listen(event:string, cb: (any) => any):void { 
    this.listeners.push({event: event, cb: cb}); 
    } 
} 

これを解決する方法についてアドバイスしてください。

+0

http://stackoverflow.com/questions/20992514/typescript-0-9-5-how-to-define-an-interface-with-static-members:しかし、多くの慣用的な定義は次のようになります。 -and-a-class-tha – shiv

答えて

2

私はあなたがインターフェイスを実装するクラスでは、あなたのメソッドのstaticキーワードを削除する必要があることだと思う:

export class MessageBus implements IMessageBus { 
    listeners: Object[] = []; 
    public dispatch(event: string, info?: any): void { 
    this.listeners 
     .forEach((l) => { 
     if (l["event"] === event) { 
      l["cb"](info); 
     } 
     }); 
    } 

    public listen(event:string, cb: (any) => any):void { 
    this.listeners.push({event: event, cb: cb}); 
    } 
} 
+1

こんにちはティエリー、返事をありがとう。 MessageBusの新しいインスタンスをインスタンス化するつもりはありませんが。したがって静的な必要性。これはトリックを行う必要があります。 http://stackoverflow.com/questions/20992514/typescript-0-9-5-how-to-define-an-interface-with-static-members-and-a-class-tha – shiv

+0

ねえ。私は問題を見る。はい、この質問は間違いなくあなたが探しているものです。私はTypeScriptの "インターフェイスにクラスを割り当てる"機能を知らなかった。しかしそれはクールなものです;-) –

3

ティエリーの答えは正しいです。

インターフェイスが正しく定義されていません。

export interface IMessageBus { 
    dispatch(eventName: string, info?: any): void; 
    listen(eventName: string, callback: Function): void; 
} 
関連する問題