Tìm kiếm trang web

angular - Lỗi TypeScript Khi Triển Khai Giao Diện


Lỗi Biên Dịch-

Lớp 'MessageBus' triển khai không đúng giao diện 'IMessageBus'. Thuộc tính 'dispatch' bị thiếu trong kiểu 'MessageBus'.

Giao diện IMessageBus

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

Lớp 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});
  }
}

Xin vui lòng tư vấn cách giải quyết việc này.

Câu trả lời #1

Câu trả lời của Thierry là đúng.

Giao diện của bạn không bị định nghĩa sai. Nhưng một định nghĩa tự nhiên hơn sẽ trông như sau:

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

Câu trả lời #2

Tôi nghĩ rằng bạn nên loại bỏ từ khóa static cho các phương thức của bạn trong lớp triển khai giao diện:

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});
  }
}