2016-03-23 3 views
2

Ошибка компилятораОшибка TypeScript при реализации интерфейса

Класс 'MessageBus' неверно реализует интерфейс 'IMessageBus'. Отсутствует свойство 'dispatch' в типе 'MessageBus'.

IMessageBus Интерфейс-

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

MessageBus class-

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; 
} 
Смежные вопросы