javascript - 获取简短的 JavaScript CustomEvent polyfill 以在 TypeScript 中进行编译?

标签 javascript typescript

我的印象是“所有有效的 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 定义

我尝试了各种方法来使其正常工作;包括将 EventCustomEvent 添加到 .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/

相关文章:

javascript - 为什么不使用 splice with spread operator 从 react 中的数组中删除项目?

javascript - 无法使用 JSON 发送 Jquery Ajax 帖子以进行工作

javascript - 如何为按钮着色并保持状态?

javascript - 如何从过滤器的过滤器返回值?

javascript - 将特定图像设置为 Div

PHP:如何彻底防止XSS攻击?

typescript - 访问 'this' 内部 promise

angular - 如何在 Angular/ typescript 中正确覆盖子类中基类的属性? ngx-quill 和 Material

javascript - 使用 Loopback 4 发送电子邮件

javascript - 加载图像后重定向