我的印象是“所有有效的 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
添加到 .d.ts
中的 window
,使得 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/