打字稿:重载事件处理程序

时间:2018-11-08 23:33:24

标签: typescript events interface

我正在尝试扩展现有接口以添加其他事件处理程序。我正在扩展的接口已经定义了几个事件处理程序。

这是基本界面:

export interface Emitter {

  on(event: 'connect', listener: (err: Error) => void ):this;

  on(event: 'end', listener: () => void ):this;
}

这也是基类:

export class Emitter extends events.EventEmitter {}

这是我的界面:

export interface EmitterExtended extends Emitter {
  on(event: 'status', listener: (status: ConnectionStatus) => void ):this;
  status?: ConnectionStatus;
}

这是打字稿给出的错误:

Interface 'EmitterExtended' incorrectly extends interface 'Emitter'.
Types of property 'on' are incompatible.

1 个答案:

答案 0 :(得分:0)

找到了解决方法here

通过声明与导入模块同名的模块,可以扩展现有的声明

import { Observable } from "./observable";
declare module "./observable" {
    interface Observable<T> {
        map<U>(f: (x: T) => U): Observable<U>;
    }
}

Observable.prototype.map = function (f) {
    // ... another exercise for the reader
}