定义基本回调类型的 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 }> {
}
我正在尝试创建一个通用的基础事件 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 }> {
}