2

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

例如:

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

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

以上将产生错误Operator '===' cannot be applied to types 'JQuery' and 'number'.

TypeScript 将结果.data()视为 JQuery 类型,因此不可能像预期的复杂类型那样在其之间进行评估。

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

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

4

3 回答 3

3

它看起来像一个错误。我刚刚查看了jQuery.d.ts文件并找到了您的返回类型,但是对于另一种方法重载。

解决方案

只需尝试在<any>您的方法调用上方添加:

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

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

这个案子对你有用

附加案例

您也可以在官方TypeScript问题线程和DefinitelyTyped问题线程上报告此问题

于 2015-09-25T12:54:36.290 回答
2

升级到最新版本的jquery.d.ts. 我也注意到了这一点。有一个错误会使它使用data(obj: { [key: string]: any; }): JQuery;而不是.data(key: string): any. 它已在此提交中修复。

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

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

if (dataValue === 0)
{
    alert("first item");
}
于 2015-09-25T14:02:06.223 回答
1

实际上,根据jQuery.d.ts的调用$("#myDiv").data("div-index")正在返回 type <any>

有没有可能,您存储在元素中的值实际上是一个 jQuery 对象?

于 2015-09-25T14:00:38.697 回答