[英]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.