Jquery TypeScript不允许在.data()和数字/字符串之间进行比较

Jquery TypeScript不允许在.data()和数字/字符串之间进行比较,jquery,typescript,typescript1.6,Jquery,Typescript,Typescript1.6,由于typescript的强类型特性,在比较jQuery.data()调用的结果和简单类型(如许多字符串)时,它似乎存在问题 例如: var dataValue = $("#myDiv").data("div-index"); if(dataValue === 0) { alert("first item"); } 上述操作将产生一个错误,运算符“==”不能应用于类型“JQuery”和“number”。 TypeScript将.data()的结果视为类型JQuery,因此不可能像复杂

由于typescript的强类型特性,在比较jQuery.data()调用的结果和简单类型(如许多字符串)时,它似乎存在问题

例如:

var dataValue = $("#myDiv").data("div-index");

if(dataValue === 0)
{
    alert("first item");
}
上述操作将产生一个错误,
运算符“==”不能应用于类型“JQuery”和“number”。

TypeScript将
.data()
的结果视为类型JQuery,因此不可能像复杂类型所期望的那样,在这两者之间进行求值

目前唯一的解决方法是在
.data()
调用的末尾调用
.toString()
,但是这意味着修改所有当前的
.data()
调用及其比较。这也使得像
>
这样的数字比较变得不可能,因为我们无法比较字符串和数字


此问题似乎仅在更新到TypeScript 1.6后出现。

它看起来像一个bug。我刚刚查看了这个文件,发现了您的返回类型,但另一个方法重载了

解决方案 根据对
$(“#myDiv”)的调用,只需尝试添加
发布线程和发布线程。数据(“div index”)
返回类型


您存储在元素中的值是否实际上是jQuery对象?

升级到最新版本的
jQuery.d.ts
。我也注意到了这一点。有一个bug会使它使用
数据(obj:{[key:string]:any;}):JQuery
而不是
。数据(键:字符串):任意
。它是固定的

升级后,
data(key:string)
的返回类型为
any
,您可以使用类型断言告诉编译器您知道它将是一个数字:

var dataValue = $("#myDiv").data("div-index") as number;

if (dataValue === 0)
{
    alert("first item");
}

作为一个不熟悉git的人,我如何知道这个变化是在哪个版本(如果有的话)?同一个包在NuGet中列出了2.2.9的最新稳定版本。@Frayt它在该NuGet包中已修复。我刚查过。
var dataValue = $("#myDiv").data("div-index") as number;

if (dataValue === 0)
{
    alert("first item");
}