2016-03-23 59 views
2

编译器错误 -实现接口上的TypeScript错误

类'MessageBus'错误地实现了接口'IMessageBus'。 类型'MessageBus'中缺少属性'dispatch'。

IMessageBus界面 -

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

您好,Thierry,感谢您的回复。虽然我不想实例化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; 
}