gpt4 book ai didi

javascript - 调度自定义事件

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:34 25 4
gpt4 key购买 nike

我的 VS 2012 Update 3 中安装了 0.9.0.1 版的 typescript 编译器。

我想分派(dispatch)一个自定义事件,但在 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 还列出了实际正确但不适用于 typescript 的构造函数签名。

我现在的想法是将已知正确的构造函数签名添加到环境变量声明中,但不要触及随附的 lib.d.ts 文件。这在技术上可行吗?我想不出正确的语法,语言规范也没有提到如何合并两个这样的声明。

或者,我只是编辑了 lib.d.ts,它在 IDE 重新启动后为我提供了更新的签名。尽管如此,我还是不想以这种方式篡改第三方文件。

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

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

最佳答案

这不是 lib.d.ts 的一部分的原因是 Internet Explorer 在 IE10 中不支持这个对象。

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

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。

关于javascript - 调度自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com