是否可以在TypeScript中扩展内置的Event类?

时间:2016-05-04 23:11:03

标签: typescript

代码:

class MyEvent extends Event {
    constructor(name) {
        super(name);
    }
}

var event = new MyEvent("mousemove");

运行时错误:

  

未捕获的TypeError:无法构建'事件':请使用' new'运算符,此DOM对象构造函数不能作为函数调用。

有解决方法吗?

3 个答案:

答案 0 :(得分:3)

  

Uncaught TypeError:无法构造'Event':请使用'new'运算符,此DOM对象构造函数不能作为函数调用。

问题在于v8运行时中的Event 定义。它不适用于基于class的扩展。以前存在同样的错误问题,即以下情况曾经失败过:

class MyError extends Error {
    constructor(message) {
        super(message);
    }
}

const error = new MyError("some message");

所以此刻。 无法扩展TypeScript(或ES6类)中的Event类。

答案 1 :(得分:0)

Event未定义为Typescript中的类,因为它是JS对象。在这种情况下你想要的是一个包装类,它以你想要的方式调用Event的方法。然后,您可以扩展该包装器。

答案 2 :(得分:0)

您可以创建一个静态类,该类将成为事件提供者:

static class EventProvider {

    static createEvent(name: string): Event {
        return new Event(name);
    }

    static createCustomEvent<T>(name: string, detail: T): CustomEvent<T> {
        return new CustomEvent<T>(name, { detail: detail });
    }
}