我的VS 2012 Update 3中安装了typescript编译器的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。另外,更正了虚构的事件类型名称)
答案 0 :(得分:3)
这不属于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或更早版本中运行 - 您需要进行填充。
答案 1 :(得分:1)
我最终完成了所有这些:
答案 2 :(得分:0)
var event = <CustomEvent>(new (<any>CustomEvent)('specifiedEvent'))
可能是一个解决方案。好看又棘手。