Typescript + jQuery:使用事件状态的正确方法?

时间:2015-07-15 03:39:46

标签: javascript jquery typescript1.4

我为SPA提供了一些简单的popstate代码,如下所示:

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

(使用originalEvent是由于这样的答案:popstate returns event.state is 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会以与我的解决方法类似的方式修复它。这就是让我觉得关于事件状态的打字稿定义中缺少的东西。

0 个答案:

没有答案