可以在TypeScript中扩展JQueryEventObject

时间:2014-01-17 13:29:04

标签: javascript typescript jquery

我刚刚开始使用Typescript,但我想知道是否可以使用新方法扩展JQueryEventObject - 我想添加一个取消方法来设置事件以停止冒泡和传播。

如果我的理解是正确的,那么使用TypeScript就无法做到这一点,因为JQueryEventObject只是一个创建的接口,用于提供对提供给事件的事件对象可用内容的智能感知。但是,我可能错了,如果有人有解决方案,那么我很感激有人与我分享。

1 个答案:

答案 0 :(得分:1)

你是正确的,typecript定义是一个接口,但是,你可以扩展它,你也可以扩展运行时来添加新的功能。有两件事需要做:

  1. 让打字稿知道新功能
  2. 在jQuery中运行时使新函数可用
  3. 以下是执行这两项操作的代码示例:

    // PatchJquery.ts
    // Include the generated .js file for this, after jQuery, in some html file.
    
    /// <reference path="typedef/jquery/jquery.d.ts" />
    
    // Runtime patch: Assume jQuery is already defined in the global scope 
    // and patch its Event prototype.
    jQuery.Event.prototype.cancel = function() {
        console.log("Someone wants me to cancel this event!",this);
    }
    
    // Define the extended typescript interface
    interface ExtJQueryEventObject extends JQueryEventObject {
        cancel():void;
    }
    
    // Test
    $(function() {
        var body:JQuery = $("body");
        body.on('click', (e:ExtJQueryEventObject) => {
            e.cancel();
        });
    });
    

    请注意,如果您想要实际的click事件,则需要为JQueryMouseEventObject定义扩展接口。您需要为所有不同的JQuery事件类型执行此操作。或者,您可以修改jquery.d.ts以将新函数添加到BaseJQueryEventObject。

    (顺便说一句,jQuery有stopPropagation()和stopImmediatePropagation(),它可能会做你想要的)