我剛剛開始使用Typescript,但我想知道是否可以用新方法擴展JQueryEventObject - 我想添加一個取消方法來設置事件停止冒泡和傳播。可能在TypeScript中擴展JQueryEventObject
如果我的理解是正確的,那麼使用TypeScript是無法做到這一點的,因爲JQueryEventObject僅僅是一個接口,它被創建爲提供事件對象提供給事件的可用內容的智能感知。但是,我可能是錯的,如果有人有解決方案,那麼我會很感激有人與我分享。
我剛剛開始使用Typescript,但我想知道是否可以用新方法擴展JQueryEventObject - 我想添加一個取消方法來設置事件停止冒泡和傳播。可能在TypeScript中擴展JQueryEventObject
如果我的理解是正確的,那麼使用TypeScript是無法做到這一點的,因爲JQueryEventObject僅僅是一個接口,它被創建爲提供事件對象提供給事件的可用內容的智能感知。但是,我可能是錯的,如果有人有解決方案,那麼我會很感激有人與我分享。
打字稿定義是一個接口,但您可以擴展它,並且還可以擴展運行時以添加新功能。有跡象表明,需要做兩件事情:
下面是一個代碼示例,做兩件事:
// 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();
});
});
請注意,如果您想要實際的單擊事件,則需要爲JQueryMouseEventObject定義擴展接口。您需要爲所有不同的JQuery事件類型執行此操作。或者,您可以修改jquery.d.ts以將新函數添加到BaseJQueryEventObject。
(順便說一句,jQuery有stopPropagation()和stopImmediatePropagation(),這可能會做你想要什麼已經)
你甚至都不需要以不同的方式命名接口,給它相同的名稱會自動擴大現有接口。 – thomaux
謝謝你們,我實際上最終是這樣做了@Anzeo的建議,而不需要ExtJQueryEventObject,它工作正常。我想要一個cancel事件的原因是,我不需要繼續編寫preventDefault(),stopPropagation()和stopImmediatePropagation(),因爲取消後的代碼調用所有這些,並將cancelBubble設置爲true。 – Anupheaus