我的印象是“所有有效的JavaScript都是有效的TypeScript”。但是每次我尝试使用它时,我都会试图做一些简单的事情:(
在这种情况下,我试图将一些.js文件重命名为.ts,并以尽可能少的工作来使事情得以编译。我想逐步转换为TypeScript。因此,重点在于仅对其进行编译而不是翻译所有代码。
我从此处包括CustomEvent polyfill的一些代码开始:
https://developer.mozilla.org/en/docs/Web/API/CustomEvent
代码是这样的:
(function () {
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
};
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
然后有一些调用它的代码:
window.dispatchEvent(new CustomEvent('typeScriptIsTehCool', { detail: 1 }));
但是,如果将所有这些内容粘贴到http://www.typescriptlang.org/Playground中,则会发现一些问题:
在基本库中未定义
window.Event
document.createEvent
不使用initCustomEvent
函数返回内容window.CustomEvent
不能设置(因为window
是已知的,并且不能仅在已知类型上构成属性而不定义它)对
new CustomEvent(x, y)
的调用失败,因为TypeScript使用没有此构造函数的CustomEvent
的lib定义我已经尝试了各种方法来使它起作用。包括在
Event
的CustomEvent
中添加window
和.d.ts
,使CustomEvent
成为标准功能;等等,但是我无法消除所有错误。我是否缺少明显的东西?
最佳答案
某些any
的使用将带您到达那里:
interface Window {
CustomEvent: CustomEvent;
}
(function () {
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt:CustomEvent = <any>document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
};
CustomEvent.prototype = Event.prototype;
window.CustomEvent = <any>CustomEvent;
})();
关于javascript - 获取简短的JavaScript CustomEvent polyfill以在TypeScript中进行编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23920708/