【问题标题】:Typescript generic base class that defines a base callback type定义基本回调类型的 Typescript 通用基类
【发布时间】:2017-07-07 05:15:11
【问题描述】:

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

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 () => { };
    }
}

【问题讨论】:

    标签: generics typescript typescript2.0


    【解决方案1】:

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

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

    【讨论】:

    • 好的,是的,你是对的。我会将其标记为答案...虽然事实证明我问错了问题...我真的希望能够指定 0 个或更多任何参数...这个答案让我走上了正确的道路。
    • @Lucas 为此,您可以使用... 休息参数。有关示例,请参见此处stackoverflow.com/questions/12697275/…
    猜你喜欢
    • 2021-03-26
    • 2012-10-19
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2022-12-18
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多