打字稿错误与定义文件不匹配

时间:2016-01-06 14:01:36

标签: jquery typescript visual-studio-2015 definitelytyped

我刚刚切换到VS2015和Typescript 1.7并在使用JQuery时遇到一些奇怪的类型错误:

var someObj: <SomeCustomType> = <SomeCustomType>$element.data("source");

此行会引发以下错误:

  

键入&#39; JQuery&#39;不能分配类型&#39; SomeCustomType&#39;。

JQuery definition file显示(第1553行)此函数签名应返回<any>类型:

interface JQuery {

    //...

    data(key: string): any;

    //...
}

使用相同的Typescript版本,相同的代码不会在VS2013上引发任何错误。

编辑:当然,我可以强制转换为<SomeCustomType><any>,但这意味着代码会膨胀,并且不应该有多个演员阵容,这在{{{{ 1}}文件提供正确的签名。

我有什么遗失的吗?

编辑:也许我的问题不明确。

在VS2013中,使用相同的TS版本和d.ts文件,

d.ts

一切都很好,VS2013看到$element.data("source") ,很高兴。

另一方面,VS2015认为返回的对象应该是<any>,因此抱怨,好像这个定义文件没有公开提到的签名。

2 个答案:

答案 0 :(得分:2)

您需要更新以使用最新的 jquery.d.ts 文件,因为TypeScript 1.7.5更严格,之前版本的 jquery.d.ts 实际上有一个错误。

Relax index signature checks for type any

中对此进行了解释

您可以通过运行

使用TSD
Sys.setlocale("LC_CTYPE","en_GB.UTF-8")

答案 1 :(得分:0)

尝试将其投射到您想要的类型:

var someObj: SomeCustomType = <SomeCustomType> $element.data("source");

或更短:

var someObj = <SomeCustomType> $element.data("source");