javascript-调度自定义事件

我在VS 2012 Update 3中安装了0.9.0.1版的打字稿编译器.

我想调度一个自定义事件,但lib.d.ts中声明的环境变量未公开预期的构造函数签名.

当我使用

var myEvent = new CustomEvent("my:event:type", { detail: { some: "data"} });
window.dispatchEvent(myEvent);

类型脚本编译器抱怨,因为据他说,

var myEvent = new CustomEvent();

是正确的.

根据Chrome 27和Aurora 24.02,由于“缺少参数”,后者是错误的

MDN还列出了实际上正确但不是用于打字稿的构造函数签名.

我现在的想法是将已知正确的构造函数签名添加到环境变量声明中,但不要触摸附带的lib.d.ts文件.从技术上讲这可能吗?我无法为其提供正确的语法,语言规范也未提及如何合并两个这样的声明.

另外,我只编辑了lib.d.ts,它在IDE重新启动后为我提供了更新的签名.不过,我不希望以这种方式篡改第三方文件.

最后,我还可以使用(sh | c)其他一些机制来编写调度自定义事件的类型脚本代码吗?

(更新:重新启动IDE会正确地重新加载lib.d.ts.此外,更正了虚假的事件类型名称)

解决方法:

它不属于lib.d.ts的原因是Internet Explorer在IE10中不支持该对象.

如果CustomEvent定义纯粹是一个接口,则可以这样扩展它:

interface CustomEvent {
    new(eventType: string, data: {});
}

但是,CustomEvent构造函数实际上是在变量声明中定义的,您不能对其进行扩展:

declare var CustomEvent: {
    prototype: CustomEvent;
    new(): CustomEvent;
}

在等待Internet Explorer / TypeScript库更新时,可以使用此方法(看起来很讨厌)来保留自定义事件.

class StandardsCustomEvent {
    static get(eventType: string, data: {}) {
        var customEvent = <any>CustomEvent;
        var event = new customEvent(eventType, data);
        return <CustomEvent> event;
    }
}

var x = StandardsCustomEvent.get("myevent",  { detail: { some: "data"} });

这可以解决您的编译器警告-但不会使其在IE10或更旧的版本中起作用-您需要进行polyfill.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐