我刚刚切换到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>
,因此抱怨,好像这个定义文件没有公开提到的签名。
答案 0 :(得分:2)
您需要更新以使用最新的 jquery.d.ts 文件,因为TypeScript 1.7.5更严格,之前版本的 jquery.d.ts 实际上有一个错误。
Relax index signature checks for type any
中对此进行了解释您可以通过运行
使用TSDSys.setlocale("LC_CTYPE","en_GB.UTF-8")
答案 1 :(得分:0)
尝试将其投射到您想要的类型:
var someObj: SomeCustomType = <SomeCustomType> $element.data("source");
或更短:
var someObj = <SomeCustomType> $element.data("source");