簡體   English   中英

Typescript + jQuery:使用事件狀態的正確方法?

[英]Typescript + jQuery: correct way to use event state?

我為SPA提供了一些簡單的popstate代碼,如下所示:

module myModule {
    $(function () {
        $(window).on("popstate", function(e) {
            if (e.originalEvent.state !== null) {
                // code removed
            }
        });
    });
}

(使用originalEvent的原因是這樣的答案: popstate返回event.state是undefined

這給出了一個編譯錯誤:

類型“事件”上不存在屬性“狀態”。

e是JQueryEventObject類型,originalEvent是Event類型。

現在,通過定義以下接口,我設法解決了該問題:

interface EventWithState extends Event {
    state: any;
}

(*我懷疑“任何”是否真的是我最好的選擇-如果有人知道應該告訴我哪種類型的狀態,更重要的是,在這種情況下我該如何找到自己的狀態)

我像這樣更改了上面的代碼:

module myModule {
    $(function () {
        $(window).on("popstate", function(e) {
            if ((<EventWithState>e.originalEvent).state !== null) {
                // code removed
            }
        });
    });
}

好的,現在可以正常工作並編譯為我想要的原始代碼。 但這似乎是一個尷尬的解決方法。

這是可接受的方法嗎? 打字稿定義中缺少什么嗎? 還是我想念的東西。

此外,使用e.state也不起作用,但是編輯jquery.d.ts(來自DefinitelyTyped)並添加state: any; BaseJQueryEventObject的修復方法與我的解決方法類似。 這就是讓我認為關於事件狀態的打字稿定義中缺少某些內容的原因。

感謝Pilot共享了另一個問題的答案,盡管起初似乎並不相關,但它確實為我提供了線索和鏈接,使我可以將其轉換為PopStateEvent而不是自己的EventWithState。

module myModule {
    $(function () {
        $(window).on("popstate", function(e) {
            if ((<PopStateEvent>e.originalEvent).state !== null) {
                // code removed
            }
        });
    });
}

https://developer.mozilla.org/en-US/docs/Web/API/Event

https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent

出於記錄目的,lib.d.ts確實使用“ any”作為狀態類型:

interface PopStateEvent extends Event {
    state: any;
    initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void;
}

https://typescript.codeplex.com/SourceControl/latest#bin/lib.d.ts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM