【问题标题】:TypeScript Error On Implementing Interface实现接口上的 TypeScript 错误
【发布时间】:2023-03-04 18:55:01
【问题描述】:

编译器错误-

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

请就如何解决这个问题提出建议。

【问题讨论】:

标签: typescript angular


【解决方案1】:

蒂埃里的回答是正确的。

您的接口没有定义错误。但更惯用的定义如下:

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

【讨论】:

    【解决方案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});
      }
    }
    

    【讨论】:

    • 您好蒂埃里,感谢您的回复。虽然我不打算实例化 MessageBus 的新实例。因此需要静态。这应该可以解决问题。 stackoverflow.com/questions/20992514/…
    • 嘿。我看到了问题。是的,这个问题绝对是你要找的。我不知道 TypeScript 的“将类分配给接口”功能。但这是一个很酷的;-)
    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多