我的印象是“所有有效的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中添加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/

10-11 05:33