我在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.
原文地址:https://codeday.me/bug/20191030/1969683.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。