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返回事件。状态未定义)
给出一个编译错误:
属性'state'在'Event'类型上不存在。
e是JQueryEventObject类型,originalEvent是Event类型。
现在我已经设法通过定义这个接口来解决这个问题:
interface EventWithState extends Event {
state: any;
}
(*我怀疑"any"在这里真的是我最好的选择-如果有人知道应该是什么类型状态,请告诉我,更重要的是,在这种情况下我如何为自己找到它)
我把上面的代码改成这样:
module myModule {
$(function () {
$(window).on("popstate", function(e) {
if ((<EventWithState>e.originalEvent).state !== null) {
// code removed
}
});
});
}
OK,现在工作得很好,并编译成我想要的原始代码。但这似乎是一个尴尬的解决方案。
这是可以接受的方法吗?打字稿定义中是否缺少了什么?还是我错过了什么?
此外,使用e.state
也不起作用,但是编辑jquery.d.ts(从DefinitelyTyped)和添加state: any;
到BaseJQueryEventObject以类似的方式修复了它。这让我觉得typescript关于Event状态的定义中缺少了一些东西。
感谢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"作为state的类型:
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
相关文章:
- Angular:如何在状态更改时调用scope方法
- 返回当前状态名称的方法
- 经典方法的目的|与对象状态的关系
- 检查 redux 状态是否更改的简单方法
- 无法更新componentWillReceiveProps方法内的状态
- 在状态更改后调用方法
- 如何使用jquery cookie插件保存toggleClass方法的状态
- 管理形式状态的最简单方法是什么
- 在 redux 化简器中更新状态的正确方法
- HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)
- 在Redux中更新嵌套状态的更干净/更短的方法
- 尽管成功传输了 json,但我的 Jquery.ajax 方法在响应中获得了错误状态
- Ember 应用程序就绪状态 - 应用程序无法识别方法
- 从状态提供程序的解析方法更改角度应用程序的状态
- 使用 javascript 实现状态检查的最佳方法
- 在 html5 上检查在线状态的最佳方法
- 在 Angular.js 中更改视图时处理$scope状态和值的正确方法是什么?
- 控制台状态方法不可用,但似乎应该可用
- 使用无状态功能组件与调用方法有什么区别
- 方法POST,状态(已取消)错误消息