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