我可以在typescript中限制继承方法的参数吗?

时间:2016-09-29 12:47:59

标签: typescript

假设我有一个扩展节点EventEmitter的类。但我想限制可以注册的事件。

class Foo extends EventEmitter {
  on(event: 'myEvent', listener: Function): this;
  emit(event: 'myEvent', ...args: any[]): boolean
}
var foo = new Foo();
foo.on('wrongEvent', ()=>{}); // this should cause compiling error

这可以实现吗?

我收到错误:

t.ts(6,3): error TS2391: Function implementation is missing or not immediately following the declaration.
t.ts(7,3): error TS2391: Function implementation is missing or not immediately following the declaration.
t.ts(10,8): error TS2345: Argument of type '"wrongEvent"' is not assignable to parameter of type '"myEvent"'.

如何防止出现TS2391错误?

1 个答案:

答案 0 :(得分:0)

我会根据@AlekseyL的评论

自己回答
class Foo extends EventEmitter {
  on(event: 'myEvent', listener: Function): this {
    return super.on(event, listener);
  };
  emit(event: 'myEvent'): boolean {
    return super.emit(event);
  }
}