我有一些用于 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 以与我的解决方法类似的方式修复它。这就是让我认为关于事件状态的打字稿定义中缺少某些内容的原因。