定义基本回调类型的 Typescript 通用基础 class

Typescript generic base class that defines a base callback type

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

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 个参数。我的问题的解决方案是将泛型更改为:

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

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

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

}