Typescript通用基类,用于定义基本回调类型

时间:2017-02-17 15:45:19

标签: generics typescript typescript2.0

我正在尝试创建一个通用的基本事件类:

class BaseEvent<T extends { (args?: any[]): void }> {
    addEventListener(listener: T): { (): void } {
        return () => { };
    }
}

我可以扩展以指定限制回调的参数:

class ExtraSpecialEvent
    extends BaseEvent<{ (foo: string): void }> {

}

但我似乎无法弄清楚语法。 Here is a playground demonstrating my problem

知道怎么做到这一点吗?

----更新----

正如@ murat-k在下面的回答,我的通用是要求一个数组...虽然这是我的问题,但它不是我的意思。我的意图是允许0个或更多any args。我的问题的解决方案是将通用更改为:

class BaseEvent<T extends { (...args: any[]): void }> {
    addEventListener(listener: T): { (): void } {
        return () => { };
    }
}

1 个答案:

答案 0 :(得分:1)

您将args声明为数组类型。您必须将其作为数组传递,例如

class ExtraSpecialEvent
    extends BaseEvent<{ (foo: string[]): void }> {

}